首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >旋转点不正确

旋转点不正确
EN

Stack Overflow用户
提问于 2015-09-08 10:29:24
回答 1查看 33关注 0票数 0

当时正在开发一些电路仿真软件,但遇到了一个非常简单的学校级问题。旋转点,现在我在xna中做过这样的事情:x=x_cos(θ)+偏移量y=y_sin(θ)+偏移量。这在这种情况下似乎行不通,所以我查了一下,很明显它是:

我也试过了,又出问题了。

代码语言:javascript
运行
复制
-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====的旋转角表示,这些不是正确的坐标,任何帮助都会被接受。

代码语言:javascript
运行
复制
  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);

                }
EN

回答 1

Stack Overflow用户

发布于 2015-09-08 10:55:39

如果你按角θ旋转点(px,py)围绕点(ox,oy),你会得到:

代码语言:javascript
运行
复制
p'x = cos(theta) * (px-ox) - sin(theta) * (py-oy) + ox
p'y = sin(theta) * (px-ox) + cos(theta) * (py-oy) + oy

那么算法是正确的,在其他地方也有问题,例如:小数点精度。

代码语言:javascript
运行
复制
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();
});
代码语言:javascript
运行
复制
<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>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32455375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档