【发布时间】:2012-03-05 20:38:39
【问题描述】:
我已经为此苦苦思索了很长一段时间了。我想我小时候应该在三角数学课上多加注意,但我们开始吧:
我有一个角度和一个点。然后我想在角度方向上放置第二个点,距离第一个点 200 个单位。我用 Atan2 得到角度,然后用 cos 和 sin 得到第三个点。但是...我认为在计算 p3.Y 的 Sin 时出了点问题。
编辑:为了澄清,我删除了 p2 并直接使用了角度:
PointF p1 = new PointF(20, 20);
double angle = 1.3034851559678624f;
//Create a new PointF in the same direction, 200 pixels away from p1
//{ X = 199,9482, Y = 4,549629 }
PointF p3 = new PointF
{
X = (float)(Math.Cos(Math.PI * angle / 180.0) * 200),
Y = (float)(Math.Sin(Math.PI * angle / 180.0) * 200)
};
//This is where I would expect 1.3034851559678624 as the first angle
//but I get -4.9073849244837184
double angle2 = Math.Atan2(p3.Y - p1.Y, p3.X - p1.X) * 180 / Math.PI;
这是上述值的直观表示。绿线是第一个角度。
【问题讨论】:
-
最终计算不应该在某个时候引用
X值吗? -
不要相信我的话,但我相信你应该用弧度来表达这些角度。
-
@Damien_The_Unbeliever - 我会在哪里使用 X 点?
-
@NikoDrašković - 是的,也许这会简化,但在我的最终代码中,我会得到一个角度角度,所以我至少需要了解如何正确地来回转换。
-
p3 是否应该在 p1-p2 定义的行上?我不太擅长阅读代码或思想(!),但您对问题的描述似乎与您的代码不一致。如果 p3 不应该在那条线上,那么“介于两者之间”是什么意思?
标签: c# .net trigonometry