当时正在开发一些电路仿真软件,但遇到了一个非常简单的学校级问题。旋转点,现在我在xna中做过这样的事情:x=x_cos(θ)+偏移量y=y_sin(θ)+偏移量。这在这种情况下似乎行不通,所以我查了一下,很明显它是:
我也试过了,又出问题了。
-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);
}
发布于 2015-09-08 10:55:39
如果你按角θ旋转点(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
那么算法是正确的,在其他地方也有问题,例如:小数点精度。
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>
https://stackoverflow.com/questions/32455375
复制相似问题