Language agnostic 旋转点不正确
当时正在开发一些电路模拟软件,但遇到了一个非常简单的学校级问题。旋转点,现在我已经在xna中这样做了:x=xcostheta+offsetx y=ysintheta+offsety。在这种情况下,这似乎不起作用,所以我查了一下,显然是: 我也试过了,但还是有问题Language agnostic 旋转点不正确,language-agnostic,Language Agnostic,当时正在开发一些电路模拟软件,但遇到了一个非常简单的学校级问题。旋转点,现在我已经在xna中这样做了:x=xcostheta+offsetx y=ysintheta+offsety。在这种情况下,这似乎不起作用,所以我查了一下,显然是: 我也试过了,但还是有问题 -1 : 0 0 : 1 1 : 0 ======0.000====== 0 : 0 -1 : -1 0 : 0 ======1.571====== 0 : 0 1 : 1 0 : 0 ======3.142====== 0 :
-1 : 0
0 : 1
1 : 0
======0.000======
0 : 0
-1 : -1
0 : 0
======1.571======
0 : 0
1 : 1
0 : 0
======3.142======
0 : 0
1 : -1
0 : 0
======4.712======
格式为x:y,旋转角度为弧度===θ====
这些不是正确的坐标,请提供帮助
Vector2[] vecs = new Vector2[3];
vecs[0] = new Vector2(-1, 0);
vecs[1] = new Vector2(0, 1);
vecs[2] = new Vector2(1, 0);
for (int i = 0; i < vecs.Length; i++)
{
vecs[i].X = vecs[i].X * (float)Math.Cos(rotation) - vecs[i].Y * (float)Math.Sin(rotation);
vecs[i].Y = vecs[i].Y * (float)Math.Cos(rotation) + vecs[i].X * (float)Math.Sin(rotation);
}
如果你将点px,py围绕点ox,oy旋转角度θ,你会得到:
p'x = cos(theta) * (px-ox) - sin(theta) * (py-oy) + ox
p'y = sin(theta) * (px-ox) + cos(theta) * (py-oy) + oy
那么,算法是正确的,您在其他地方也有问题,例如:小数点精度
函数旋转点,θ,原点{
原点=原点| |[0,0];
返回[
Math.roundMath.costheta*点[0]-原点[0]-Math.sintheta*点[1]-原点[1]+原点[0]*1000/1000,
Math.roundMath.sintheta*点[0]-原点[0]+Math.costheta*点[1]-原点[1]+原点[0]*1000/1000
]
}
$function{
v=功能{
变量点=[
parseFloat$inputx.val,
parseFloat$inputy.val
]
变量角度=parseFloat$InputHeta.val;
var结果=旋转点,角度;
console.logresult
$result.text[+result+];
};
$inputx.bindchange paste keyup,函数{v};
$inputy.bindchange paste keyup,函数{v};
$inputtheta.bindchange paste keyup,函数{v};
v
};
X
Y
Θ
=
既然我绕原点旋转,那么它就变成了x'=costheta*x-sintheta*Y'=sintheta*x+costheta*Y,这就是我所做的,我讨厌浮点不精确,我该怎么处理呢?顺便说一句,谢谢。一种方法是对结果进行四舍五入,例如:数学。四舍五入…*1000/1000,取3个有效数字,并使用从零开始的中点四舍五入。请注意,即使在您使用的语言中,这也可以四舍五入。示例Math.round3.5将是3而不是4。