将2点坐标转换为angleBetween()的矢量坐标?

时间:2013-08-11 07:47:40

标签: math vector maya pymel

我正在开发一个 PyMEL脚本,它允许用户多次复制一个选定的对象,使用CV曲线及其点坐标来转换&将每个副本旋转到空间中的某个点。 为了实现这一点,我使用每个CV(控制顶点)的相邻2个点来确定对象的旋转。

我已设法检索曲线CV的坐标

#Add all points of the curve to the cvDict dictionary
int=0
cvDict={}
while int<selSize:
    pointName='point%s' % int
    coords= pointPosition ('%s.cv[%s]' % (obj,int), w=1)

    #Setup the key for the current point
    cvDict[pointName]={}

    #add coords to x,y,z subkeys to dict
    cvDict[pointName]['x']= coords[0]
    cvDict[pointName]['y']= coords[1]
    cvDict[pointName]['z']= coords[2]

    int += 1

现在我遇到的问题是弄清楚如何获得每个CV的角度。 我偶然发现了angleBetween()函数:

http://download.autodesk.com/us/maya/2010help/CommandsPython/angleBetween.html

理论上,这应该是我的解决方案,因为我可以找到每个曲线的CV的“中间向量”(不确定这是否是数学术语)(使用相邻的CV坐标来找到第四个点)和使用上面提到的函数来确定我需要使用参考矢量旋转对象多少,例如在z轴上。

至少在理论上 - 问题是该函数只为每个向量采用1组坐标,我绝对不知道如何将我的点坐标转换为该格式(因为我总是至少有2组坐标,一个对于每一点)。

感谢。

2 个答案:

答案 0 :(得分:0)

如果你想走很长的路而不是抓住曲线的世界变换,一定要使用pymel的datatypes模块。它拥有python原生数学模块所做的一切以及Maya特定的其他一些功能。您还可以找到基于简历要求的数学here

希望能让你朝着正确的方向前进。

答案 1 :(得分:0)

如果您要跳过数学运算,也许您应该创建一个定位器,沿曲线对其进行路径动画处理,然后对结果进行采样。这将允许您沿曲线获得完全连续的方向。您在上面概述的中点约束方法仅限于每个曲线段1个有效样本 - 如果您想要两个cv之间的1/4路或3/4路,您的方向将会关闭。另外,您无需重新设置所有不同的选项来决定辅助旋转轴,读取具有时髦参数化的曲线等等。