0 Pluspunkte 0 Minuspunkte

Wenn ich ein viereck aus linien erstelle.

from PIL import Image, ImageDraw

image = Image.open("test.jpg")

draw = ImageDraw.Draw(image)

lines = [
    [(50, 50), (50, 100)],
    [(50, 100), (100, 100)],
    [(100, 100), (100, 50)],
    [(100, 50), (50, 50)]
]

for line in lines:
    start_point = line[0]
    end_point = line[1]
    draw.line([start_point, end_point], fill=(255, 0, 0), width=3)

image.show()

Kann ich das irgendwie drehen?

von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

Zuerst berechnest du den Mittelpunkt des Viereck

center_x = (lines[0][0][0] + lines[2][1][0]) / 2
center_y = (lines[0][0][1] + lines[2][1][1]) / 2

Dann definierst du den Winkel und konvertierst ihn in Radiant.

angle = 25
angle_rad = math.radians(angle)

Mit dieser Funktion kannst du jede Linie des Viereck einzeln rotieren. Bevor du das Objekt (die Linie) rotierst, musst du es zum lokalen Mittelpunkt verschieben, damit es sich um seine eigene Achse dreht und nicht um seine verschobene Position.

rotated_lines = []

for line in lines:
    start_x, start_y = line[0]
    end_x, end_y = line[1]

    # Koordinaten der Linie zum Mittelpunkt übersetzen
    translated_start_x = start_x - center_x
    translated_start_y = start_y - center_y
    translated_end_x = end_x - center_x
    translated_end_y = end_y - center_y

    # Linie rotieren
    rotated_start_x = translated_start_x * math.cos(angle_rad) - translated_start_y * math.sin(angle_rad)
    rotated_start_y = translated_start_x * math.sin(angle_rad) + translated_start_y * math.cos(angle_rad)
    rotated_end_x = translated_end_x * math.cos(angle_rad) - translated_end_y * math.sin(angle_rad)
    rotated_end_y = translated_end_x * math.sin(angle_rad) + translated_end_y * math.cos(angle_rad)

    # Linie zu den ursprünglichen Koordinaten übersetzen
    rotated_start_x += center_x
    rotated_start_y += center_y
    rotated_end_x += center_x
    rotated_end_y += center_y

    rotated_lines.append([(rotated_start_x, rotated_start_y), (rotated_end_x, rotated_end_y)])
von