Я уже давно почесал голову над этим. Думаю, мне следовало уделять больше внимания на уроках математики тригонометрии, когда я был моложе, но здесь мы идем:
У меня есть угол и точка. Затем я хочу поставить вторую точку в направлении угла, на расстоянии 200 единиц от первой точки. Я использую Atan2, чтобы получить угол, затем cos и sin, чтобы получить третью точку. Но ... я думаю, что что-то идет не так при расчете греха для p3.Y.
РЕДАКТИРОВАТЬ: Чтобы уточнить, я удалил 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;
Вот визуальное представление значений выше. Зеленая линия - первый угол.