首页 > 解决方案 > Maya Python:在曲线上找到中点变换

问题描述

我很难找到一种方法来获得曲线中间点的变换。我还没有用大量的点均匀地重建曲线,因为这似乎有点矫枉过正。curve并且curvePoint似乎没有得到这些数据。

有谁知道在一个电话中做到这一点的方法?

标签: pythonmaya

解决方案


您可以使用pointOnCurve命令查询点属性(位置、法线、切线、曲率等):

from maya import cmds

# Define number of control points for our circle
num_sections = 6
# Define substeps to query between control points
num_substeps = 4
# Create a circle
curve_transform, curve_make = cmds.circle(sections=num_sections)
for n in range(num_sections + 1):
    for i in range(num_substeps):
        k = n + 1.0 / num_substeps * i
        if k > num_sections:
            break
        print("position({:.2f}) = {}".format(k, cmds.pointOnCurve(curve_transform, position=True, parameter=k)))

结果:

position(0.00) = [5.551115123125783e-17, 1.0, 0.0]
position(0.25) = [-0.25710129174850527, 0.9640625000000002, 0.0]
position(0.50) = [-0.4979646071760523, 0.8625, 0.0]
position(0.75) = [-0.7063519699616827, 0.7046875000000001, 0.0]
position(1.00) = [-0.8660254037844386, 0.5000000000000001, 0.0]
position(1.25) = [-0.9634532617101879, 0.25937500000000024, 0.0]
position(1.50) = [-0.9959292143521046, 2.498001805406602e-16, 0.0]
position(1.75) = [-0.9634532617101882, -0.25937499999999963, 0.0]
position(2.00) = [-0.8660254037844389, -0.49999999999999967, 0.0]
position(2.25) = [-0.706351969961683, -0.7046874999999997, 0.0]
position(2.50) = [-0.4979646071760526, -0.8624999999999998, 0.0]
position(2.75) = [-0.25710129174850566, -0.9640624999999998, 0.0]
position(3.00) = [-4.718447854656915e-16, -1.0, 0.0]
position(3.25) = [0.2571012917485048, -0.9640625000000002, 0.0]
position(3.50) = [0.49796460717605184, -0.8625000000000003, 0.0]
position(3.75) = [0.7063519699616824, -0.7046875000000004, 0.0]
position(4.00) = [0.8660254037844386, -0.5000000000000007, 0.0]
position(4.25) = [0.963453261710188, -0.25937500000000063, 0.0]
position(4.50) = [0.9959292143521046, -7.355227538141662e-16, 0.0]
position(4.75) = [0.9634532617101882, 0.25937499999999925, 0.0]
position(5.00) = [0.866025403784439, 0.4999999999999992, 0.0]
position(5.25) = [0.7063519699616831, 0.7046874999999995, 0.0]
position(5.50) = [0.4979646071760525, 0.8624999999999998, 0.0]
position(5.75) = [0.2571012917485054, 0.9640624999999998, 0.0]
position(6.00) = [5.551115123125783e-17, 1.0, 0.0]

parameter参数是从 0 到曲线上控制点的数量。您还可以使用从 0 到 1 的标准化参数进行查询:

for k in range(10 + 1):
    print("position({:.2f}) = {}".format(k / 10.0, cmds.pointOnCurve(curve_transform, position=True, parameter=k / 10.0, turnOnPercentage=True)))

结果:

position(0.00) = [5.551115123125783e-17, 1.0, 0.0]
position(0.10) = [-0.5861259932813082, 0.8056000000000001, 0.0]
position(0.20) = [-0.9491638425477449, 0.3096, 0.0]
position(0.30) = [-0.9491638425477451, -0.3095999999999995, 0.0]
position(0.40) = [-0.5861259932813081, -0.8056000000000001, 0.0]
position(0.50) = [-4.718447854656915e-16, -1.0, 0.0]
position(0.60) = [0.5861259932813074, -0.8056000000000005, 0.0]
position(0.70) = [0.9491638425477444, -0.30960000000000143, 0.0]
position(0.80) = [0.9491638425477449, 0.3096, 0.0]
position(0.90) = [0.5861259932813081, 0.8055999999999998, 0.0]
position(1.00) = [5.551115123125783e-17, 1.0, 0.0]

推荐阅读