Language agnostic 旋转点不正确

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 :

当时正在开发一些电路模拟软件,但遇到了一个非常简单的学校级问题。旋转点,现在我已经在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 : 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。