Я знаю, что теория поворота точки на угол в миллионе раз в Интернете, но я не получу свой код для правильной работы.Вращающаяся точка по углу
У меня есть линия с 2 очками, когда вы нажимаете на 1 из 2 точек, вы поворачиваете точку относительно другой точки. В моей тестовой папке у меня верхняя левая точка и нижняя правая точка, поэтому диагональная линия.
Я хочу убедиться, что линия привязана к повороту на 90 градусов, поэтому она всегда будет прямой (по вертикали или по горизонтали). Поэтому я сначала получаю текущий угол, затем получаю угол, который должен быть, и вычисляю разницу.
Point startPoint = obj2.Location;
Point currentEndPoint = new Point(obj2.Location.X + obj2.Size.Width, obj2.Location.Y + obj2.Size.Height);
Point newEndPoint = e.Location;
double angle = MathHelper.GetAngleOfVerticalLine(startPoint, newEndPoint);
double angleToBe = MathHelper.GetClosestNumber(angle, new double[] { 0, 90, 180, 270, 360 });
double angleToDo = 0.0; // -5
if (angle < angleToBe)
{
angleToDo = Math.Abs(angle - angleToBe);
}
else
{
angleToDo = angleToBe - angle;
}
angleToDo %= 360;
Point newSize = MathHelper.RotatePoint(newEndPoint, startPoint, angleToDo);
obj.Size = (Size)newSize;
public static Point RotatePoint(Point pointToRotate, Point centerPoint, double angleInDegrees)
{
double angleInRadians = angleInDegrees * (Math.PI/180);
double cosTheta = Math.Cos(angleInRadians);
double sinTheta = Math.Sin(angleInRadians);
return new Point
{
X =
(int)
(cosTheta * (pointToRotate.X - centerPoint.X) -
sinTheta * (pointToRotate.Y - centerPoint.Y) + centerPoint.X),
Y =
(int)
(sinTheta * (pointToRotate.X - centerPoint.X) +
cosTheta * (pointToRotate.Y - centerPoint.Y) + centerPoint.Y)
};
}
Но результаты, которые я получаю, не являются прямыми, но они являются случайными. Угол, angleToBe и angleToDo работают правильно. Тогда метод RotatePoint должен быть проблемой, но я не уверен в этом на 100%.
Что не работает должным образом? Получение угла, или получение точки, или что? – davidsbro
Итак, каков ваш вопрос? –
Я забыл последний абзац, извините. Как я уже сказал, я получаю случайные строки, и проблема наиболее вероятна в методе RotatePoint или в сочетании с моим общим кодом/использованием. – ErwinOkken