Я хочу повернуть линию на произвольный угол альфа.
Итак, я получил координаты линии: например, (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);
Я думаю, что вычисление на самом деле правильно, но вычисление в радианах, и я не знаю, как это определить в градусах.