我在一个与经典X / Y坐标空间不同的屏幕坐标空间中工作,其中我的Y方向向下而不是向上。
我还想弄清楚如何让我的屏幕上的圆圈始终背离屏幕的中心点。
如果我的屏幕中心点位于x(200)y(300)并且我的圆圈中心点位于x(150)和y(380)那么我想计算圆圈的角度面对。
目前我有这个:
Point centerPoint = new Point(200, 300);
Point middleBottom = new Point(200, 400);
Vector middleVector = new Vector(centerPoint.X - middleBottom.X, centerPoint.Y - middleBottom.Y);
Vector vectorOfCircle = new Vector(centerPoint.X - 150, centerPoint.Y - 400);
middleVector.Normalize();
vectorOfCircle.Normalize();
var angle = Math.Acos(Vector.CrossProduct(vectorOfCircle, middleVector));
Console.WriteLine("Angle: {0}", angle * (180/Math.PI));
我没有得到我期望的结果。
我会说,当我进入我的圈子的x(150)和y(300)时,我希望看到旋转90度,但我没有得到那个......我得到180 !!
非常感谢任何帮助。
干杯, 标记
答案 0 :(得分:1)
没关系,我想我现在明白了:
我读过这篇文章:
http://www.euclideanspace.com/maths/algebra/vectors/angleBetween/index.htm
确定我需要使用 Atan2 而不是 acos
Point centerPoint = new Point(200, 300);
Point middleBottom = new Point(200, 400);
Vector middleVector = new Vector(centerPoint.X - middleBottom.X, centerPoint.Y - middleBottom.Y);
Vector vectorOfCircle = new Vector(centerPoint.X - 250, centerPoint.Y - 300);
middleVector.Normalize();
vectorOfCircle.Normalize();
var angle = Math.Atan2(vectorOfCircle.Y, vectorOfCircle.X) - Math.Atan2(middleVector.Y, middleVector.X);
Console.WriteLine("Angle: {0}", angle * (180/Math.PI));
答案 1 :(得分:1)
一句话:
cos积分函数用于点积。 交叉产品使用窦。
答案 2 :(得分:0)
不,这是正确的。零角度从origo(centerPoint)向右。由于圆圈位于origo的左侧,因此角度为180度。