我正在使用python为初学者编写脚本。 使这个例子变得简单,我有一条边,uv坐标为([0,0],[1,1]),所以它是45度角。我有另一个边是([0,0],[0,1])所以它的角度是0/360度。我的目标是比较这两个边缘的角度以获得差异,这样我就可以修改第二个边缘的角度以匹配第一个边缘的角度。有没有办法通过矢量数学来做到这一点?
答案 0 :(得分:0)
最容易重建并因此建设性地记住IMO的复杂画面。通过乘以a=a.x+i*a.y
的共轭来计算从b=b.x+i*b.y
到b
旋转a
的角度,以从零角度得到一个角度。正实轴,
arg((a.x-i*a.y)*(b.x+i*b.y))
=arg((a.x*b.x+a.y*b.y)+i*(a.x*b.y-a.y*b.x))
=atan2( a.x*b.y-a.y*b.x , a.x*b.x+a.y*b.y )
请注意,屏幕坐标使用与笛卡尔/复平面相反的方向,因此更改使用符号开关,从atan2(y,x)
到atan2(-y,x)
以获得通常方向的角度。
要从b
生成向量w
旋转角度(以弧度为单位)a
,请乘以cos(w)+i*sin(w)
以获取
b.x = cos(w)*a.x - sin(w)*a.y
b.y = cos(w)*a.y + sin(w)*a.x
您必须重新缩放才能获得指定长度的b
。