![]() |
AW: Drehsinn von Ebenen
Nein. Leider. Habs getestet. Und daß die Punkte auf der Ebene liegen ist hier gesichert weil die Ebenen so aufgespannt werden.
Der Code von #8 ist eine Pyramide. P0..P3 sind die Grundfläche, P4 die Spitze. Bei Ebene 5 sagt er ist negativ. Ich hab auf die Schnelle nur die ersten beiden Punkte einer Begrenzungsebene geprüft:
Delphi-Quellcode:
function TPolyeder.CrossProduct(const A, B: integer): TPolyederPoint;
begin Result.X := FPoints[A].Y * FPoints[B].Z - FPoints[A].Z * FPoints[B].Y; Result.Y := FPoints[A].Z * FPoints[B].X - FPoints[A].X * FPoints[B].Z; Result.Z := FPoints[A].X * FPoints[B].Y - FPoints[A].Y * FPoints[B].X; end; function TPolyeder.ClockwiseSense(const Index: integer): integer; begin Result := Sign(CrossProduct(FPlanes[Index].Items[0], FPlanes[Index].Items[1]).Z); ShowMessage(Format('Result %d', [Result])); end; |
AW: Drehsinn von Ebenen
Ja, ich habe deine Frage glaube ich etwas falsch verstanden, sorry. Da fällt mir jetzt auf die Schnelle auch nichts ein. :(
|
AW: Drehsinn von Ebenen
Wie sieht denn sowas für den Raum aus, das wär's (denke ich mal) :gruebel:
Für 2D: Current = B, A = Prev, C = Next
Code:
|xA, yA, 1|
Det |xB, yB, 1| > 0 |xC, yC, 1| |
AW: Drehsinn von Ebenen
Warte mal...
Du suchst dies IsClockwise, was ich für 2D gepostet habe für 3D? |
AW: Drehsinn von Ebenen
Für D2 hab ich's doch direkt über deinem Post gepostet?
Delphi-Quellcode:
function TD2Points.ClockwiseOrder(const J: integer): boolean;
var I, K: integer; D: double; begin I := Prev(J); K := Next(J); D := FItems[I].X * FItems[J].Y + FItems[J].X * FItems[K].Y + FItems[K].X * FItems[I].Y - FItems[J].Y * FItems[K].X - FItems[K].Y * FItems[I].X - FItems[I].Y * FItems[J].X; Result := D > 0; end; So gehts für D3 schon mal nicht. :shock:
Code:
xA, yA, zA, 1
xB, yB, zB, 1 Det xC, yC, zC, 1 > 0 0, 0, 0, 1 |
AW: Drehsinn von Ebenen
Zitat:
Ich über den Ansatz Matrix komme ich nicht, aber über den Ansatz mit Vektoren. Das müßte doch einfach mit dem Crossprodukt gehen, oder? Ich habe sowas für Polygonflächen in 3D:thumb:. Ist das nicht schon das Gesuchte :
Delphi-Quellcode:
A := 0;
for i := 2 to Self.Count - 1 do begin t := Triangle.Create(Self[0], Self[i], Self[i - 1]); A := A + t.CrossProdukt; end; Result := A.Length / 2; function Triangle.CrossProdukt: Vektor; var R1, R2: Vektor; begin // FA, FB, FC => Vektoren des Triangle R1 := FC - FA; R2 := FB - FA; Result := R1.CrossProduct(R2); end; |
AW: Drehsinn von Ebenen
Hi Bud,
wollte nicht "überarbeitet" rüberkommen. Sorry. Kann sein, daß das Kreuzprdukt bei bei D2 funzt, aber defintiv nicht bei D3. Damit hat's (bis jetzt) für alle Beispiele gefunzt (aber nur, wenn man das System in den Urpsrung (0,0,0) verschiebt).
Delphi-Quellcode:
|xA, yA, zA, 1|
|xB, yB, zB, 1| Det |xC, yC, zC, 1| > 0 | 1, 1, 1, 1| |
AW: Drehsinn von Ebenen
Zitat:
|
AW: Drehsinn von Ebenen
Das ist sicherlich no problem. Arber, das Problem ist, einen geeigneten Vektor zu finden um die fehlende Zeile der Determinante zu ergänzen. Hatte eben einen Fall wo es nicht ging. Ich lass es jetzt. Wenn noch jemand eine Idee zu hat, bitte her damit. Ich bin meinem Latein am Ende. Muß halt aufpassen daß ich die Ebenen korrekt eingebe.
Delphi-Quellcode:
Dank' Dir und Gruß alle, die hier mitgewirkt haben.:thumb:
|xA, yA, zA, 1|
|xB, yB, zB, 1| Det |xC, yC, zC, 1| > 0 | ?, ?, ?, ?| |
AW: Drehsinn von Ebenen
Du bist irgendwie so auf Matrix/Determinante fixiert. Vllt machst Du es doch mit dieser Flächenberechnung bzw Crossprodukt. Bis dahin...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz