正在开发一些电路仿真软件,但遇到了一个非常简单的学校级问题。旋转点,现在我在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);
}
答案 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>