уже 3й мой вопрос по математике, сам удивляюсь Вот смарите, вот есть такие точки нужно точки C и B повернуть на 90 градусов против часовой стрелки относительно точки A, тоесть получится вот так получается координаты A (-3;1) до: B (-1;-4) C (-2;-3) после поворота на 90 градусов (или -90 или 270, хз как правильно): B (2;3) C (1;2) Вооот... Внимание вопрос: какой формулой вычислить куда переносить точки, для формулы есть AX - координаты точки A по оси X AY - координаты точки A по оси Y BX - координаты точки B по оси X BY - координаты точки B по оси Y R - угол поворота для точки C уже понятно, что такая же формула кому интересно чего я такое делаю, есть вот этот кораблик, он состоит из 40 частей, и его надо поворачивать, а вместе с корпусом переносить все части относительно корпуса
m - точка вращения p - Объект вращения beta - Угол вращения alpha = arctan((py - my)/(px - mx)) r = sqrt( (py - my)^2 + (px - mx)^2 ) px´ = r*cos(alpha + beta) py´ = r*sin(alpha + beta) P´ (px´ + mx|py´ + my)
мну Hunter1121 всё научил и объяснил, всем спасибо, все свободны ща в пыхе сделаю, выложу PHP: <?php $start_position_AX = -3; // вокруг чего вращать X $start_position_AY = 1; // вокруг чего вращать Y $start_position_BX = -1; // что вращать X $start_position_BY = -4; // что вращать Y $ugol = -90; // угол вращения $PI = 3.1415926535897932384626433832795; // ПИ же //перевести (в новую систему) точку A в 0;0 и B отностельно неё $new_BX = $start_position_BX-$start_position_AX; $new_BY = $start_position_BY-$start_position_AY; echo "new_BX = $new_BX<br>new_BY = $new_BY<br>"; //крутим в новой системе $radian = $ugol*($PI/180); // радиан для функций COS и SIN echo "Радиан = $radian<br>"; $x1 = $new_BX*cos($radian)+$new_BY*sin($radian); $y1 = -$new_BX*sin($radian)+$new_BY*cos($radian); echo "x1 (в новой) = $x1<br>y1 (в новой) = $y1<br>"; //переводим результат обратно в старую $x_v_staroi = $x1+$start_position_AX; $y_v_staroi = $y1+$start_position_AY; echo "X в старой = $x_v_staroi<br>Y в старой = $y_v_staroi<br><br><br>"; echo "Мы вращали точку B({$start_position_BX};{$start_position_BY}) вокруг точки A({$start_position_AX};{$start_position_AY}) на $ugol градусов<br> координаты точки B получились ({$x_v_staroi};{$y_v_staroi})"; ?> получаца Code: Мы вращали точку B(-1;-4) вокруг точки A(-3;1) на -90 градусов координаты точки B получились (2;3)
Ponchik, Вращение будет 90°, а не -90°. Это так к слову. На Питоне: Code: from math import atan, cos, sin, sqrt class Point(object): def __init__(self, x = 0, y = 0): self.x = x self.y = y def __str__(self): return "Point(" + str(self.x) + ", " + str(self.y) + ")" def __add__(self, other): return self.x.__add__(other.x), self.y.__add__(other.y) def __sub__(self, other): return self.x.__sub__(other.x), self.y.__sub__(other.y) class Rotation(object): def __init__(self, P1 = Point(), P2 = Point(), Winkel = 0): self.P1 = P1 self.P2 = P2 self.Winkel = Winkel def __str__(self): mPoint = "M(" + str(self.P1.x) + ", " + str(self.P1.y) + ")" rPoint = "P(" + str(self.P2.x) + ", " + str(self.P2.y) + ")" rAngle = str(self.Winkel) + "°" return "Пункт " + rPoint + " после вращения вокруг " + mPoint + " на " + rAngle + "," def length(self): DifX = (self.P2.x - self.P1.x) ** 2 DifY = (self.P2.y - self.P1.y) ** 2 return sqrt(DifX + DifY) def berechnen(self): alpha = atan((self.P2.y - self.P1.y) / (self.P2.x - self.P1.x)) PX = round(self.length()*cos(alpha + atan(self.Winkel)), 1) PY = round(self.length()*sin(alpha + atan(self.Winkel)), 1) PAR = Point(PX, PY) + self.P1 return self.__str__() + " приобрёл следующие координаты P´" + str(PAR) + "." def main(): P1 = Point(-3, 1) P2 = Point(-2, -3) Winkel = 90 print(Rotation(P1, P2, Winkel).berechnen()) if __name__ == "__main__": main()