旋转点不正确

时间:2015-09-08 10:29:25

标签: language-agnostic

正在开发一些电路仿真软件,但遇到了一个非常简单的学校级问题。旋转点,现在我在xna之前做过这样的事情:x = x cos(theta)+ offsetx y = y sin(theta)+ 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然后旋转角度为弧度==== theta ==== 那些不是正确的坐标,任何帮助都是合适的。

  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);

                }

1 个答案:

答案 0 :(得分:0)

如果你以点角θ(θ,oy)旋转点(px,py),你会得到:

p'x = cos(theta) * (px-ox) - sin(theta) * (py-oy) + ox
p'y = sin(theta) * (px-ox) + cos(theta) * (py-oy) + oy

然后算法是正确的,你在其他地方有问题,例如:小数点能力

function rotate(point, theta, origin){
    origin = origin || [0, 0];
    return [
        Math.round((Math.cos(theta) * (point[0]-origin[0]) - Math.sin(theta) * (point[1]-origin[1]) + origin[0])*1000)/1000,
        Math.round((Math.sin(theta) * (point[0]-origin[0]) + Math.cos(theta) * (point[1]-origin[1]) + origin[0])*1000)/1000
    ]
}

$(function() {
  v = function() {
    var point = [
      parseFloat($("#inputx").val()),
      parseFloat($("#inputy").val())
    ]
    var angle = parseFloat($("#inputtheta").val());
    var result = rotate(point,angle);
    console.log(result)
    $("#result").text("["+result+"]");
  };
  $("#inputx").bind("change paste keyup", function() {v()});
  $("#inputy").bind("change paste keyup", function() {v()});
  $("#inputtheta").bind("change paste keyup", function() {v()});
  v();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div>
<label for="inputx">X</label>
<input type="text" id="inputx" class="form-control" name="inputx" value="-1">
</div>

<div>
<label for="inputy">Y</label>
<input type="text" id="inputy" class="form-control" name="inputy" value="0">
</div>

<div>
<label for="inputtheta">Θ</label>
<input type="text" id="inputtheta" class="form-control" name="inputtheta" value="1.57079633">
</div>

<div>
<label>=</label>
<div id="result" ></div>
</div>