kkausp hat folgendes geschrieben: |
Bei konvexen erhälts du dann, wenn du jede Kante mit der Schnittlinie vergleichst, 2 neue Punkte die dann zu Eckpunkte der beiden neuen Vielecke werden oder 0 Schnittpunkte wenn die linie das Vieleck nicht schneidet. |
Jupp. Soweit bin ich schon.
Hab aber keine Ahnung wie ich das dann gescheit in eine Schleife packen soll.
Kanten haben Start und Endpunkte.
FLines sind die allten Kanten und tmpLines die neuen.
Seiten können entweder Links oder Rechts sein, also 2 Werte. Dafür hab ich Boolean genommen.
CurrSide ist die aktuelle Seite.
WantSide ist die Seite des Vielecks die in tmpLines kommt und übrig bleiben soll. Wird der Funktion übergeben.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| CurrSide := true; For Alle Kanten durchgehen do pCross := Schnittpunkt von Kante und Linie; if Schnittpunkt nicht auf Kante then begin if CurrSide = WantSide then Kante zu tmpLines hinzufügen; end else begin if then begin Neue Kante zu tmpLines hinzufügem mit altem Anfangspunkt als neuen Anfangspunkt und Schnittpunkt als Endpunkt; Neue Kante zu tmpLines hinzufügen mit Schnittpunkt als Anfangspunkt; end else Der letzten Kante den Schnittpunkt als Endpunkt hinzufügen; Neue Kante zu tmpLines hinzufügem mit Schnittpunkt als Anfangspunkt und alten Endpunkt als neuen Endpunkt; end; CurrSide := not CurrSide; end; FLines := tmpLines; |
Das sieht erstens kompliziert aus und funktioniert auch nicht.
Was soll passieren wenn die Linie genau durch zwei berührende Kante geht?
Da muss es irgendwie einen Trick geben.
MfG