Повернуть линию в системе координат - PullRequest
0 голосов
/ 17 октября 2019

Я хочу повернуть линию на произвольный угол альфа.

Итак, я получил координаты линии: например, (10,20 20,30). И пользователь вводит, например, 45.

Обратите внимание, что система координат не является регулярной. Я имею в виду: ось X (горизонтальная), как обычно, положительна в правильном направлении. Но ось Y (вертикальная) идет в положительном направлении вниз.

Таким образом, точка, которая обычно находится в точке (2 | -3), находится в точке (2 | 3) в моей системе координат.

Теперь линия должна поворачиваться на этот угол на 45 градусов. Моя мысль состоит в том, чтобы сначала переместить линию в начало системы координат, затем повернуть ее (просто переместив точку, которая не находится в начале координат), а затем переместить ее обратно в старое положение.

**// moving the line to the origin of the coordinate system**    

int movedX1 = 0;
int movedY1 = 0;
int movedX2;
int movedY2;

if ((movedX2 = x2 - x1)<0)
{
movedX2 *= -1;
};
if ((movedY2 = y2 - y1) < 0)
{
movedY2 *= -1;
};

string newX1 = movedX1.ToString();
string newY1 = movedY1.ToString();
string newX2 = movedX2.ToString();
string newY2 = movedY2.ToString();

GIO.setItemProperty(item, "PointList", "\"" + newX1 + ", " + newY1 + "   " 
+ newX2 + ", " + newY2 + "\"");

MessageBox.Show("Moved Coordinates: "+ newX1 + ", " + newY1 + "   " + 
newX2 + ", " + newY2 );

**// now the Point that is not in the origin should be moved so the line 
// turns X degrees.**

double inputAngle, ind0_0, ind0_1, ind1_0, ind1_1;

inputAngle= Convert.ToDouble(txtWinkel.Text);

ind0_0 = Math.Cos(inputAngle/ Math.PI * 180);
ind0_1 = Math.Sin(inputAngle/ Math.PI * 180);
ind1_0 = Math.Sin(inputAngle/ Math.PI * 180);
ind1_1 = Math.Cos(inputAngle/ Math.PI * 180);

double finalX2 = -(ind0_0 * movedX2 - ind0_1 * movedY2);
double finalY2 = -(ind1_0 * movedX2 + ind1_1 * movedY2);

Я думаю, что вычисление на самом деле правильно, но вычисление в радианах, и я не знаю, как это определить в градусах.

...