AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Drehsinn von Ebenen

Ein Thema von Bjoerk · begonnen am 28. Okt 2015 · letzter Beitrag vom 31. Okt 2015
Antwort Antwort
Seite 2 von 3     12 3      
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: Drehsinn von Ebenen

  Alt 28. Okt 2015, 14:34
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;
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#12

AW: Drehsinn von Ebenen

  Alt 28. Okt 2015, 14:51
Ja, ich habe deine Frage glaube ich etwas falsch verstanden, sorry. Da fällt mir jetzt auf die Schnelle auch nichts ein.
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#13

AW: Drehsinn von Ebenen

  Alt 28. Okt 2015, 18:32
Wie sieht denn sowas für den Raum aus, das wär's (denke ich mal)

Für 2D:

Current = B, A = Prev, C = Next

Code:
    |xA, yA, 1|
Det |xB, yB, 1| > 0
    |xC, yC, 1|
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
670 Beiträge
 
#14

AW: Drehsinn von Ebenen

  Alt 28. Okt 2015, 20:17
Warte mal...
Du suchst dies IsClockwise, was ich für 2D gepostet habe für 3D?
Achtung: Bin kein Informatiker sondern komme vom Bau.
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: Drehsinn von Ebenen

  Alt 28. Okt 2015, 21:07
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.

Code:
     xA, yA, zA, 1
     xB, yB, zB, 1
Det  xC, yC, zC, 1  > 0
      0, 0, 0, 1

Geändert von Bjoerk (28. Okt 2015 um 21:10 Uhr)
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
670 Beiträge
 
#16

AW: Drehsinn von Ebenen

  Alt 28. Okt 2015, 21:17
Zitat:
D2, D3
Na, schon etwas überarbeitet?

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.
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;
Achtung: Bin kein Informatiker sondern komme vom Bau.

Geändert von Jens01 (28. Okt 2015 um 21:20 Uhr)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#17

AW: Drehsinn von Ebenen

  Alt 29. Okt 2015, 04:03
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|
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
670 Beiträge
 
#18

AW: Drehsinn von Ebenen

  Alt 29. Okt 2015, 11:13
Zitat:
aber nur, wenn man das System in den Urpsrung (0,0,0) verschiebt
Ist das ein Problem?
Achtung: Bin kein Informatiker sondern komme vom Bau.
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#19

AW: Drehsinn von Ebenen

  Alt 29. Okt 2015, 13:07
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:
    |xA, yA, zA, 1|
    |xB, yB, zB, 1|
Det |xC, yC, zC, 1| > 0
    | ?, ?, ?, ?|
Dank' Dir und Gruß alle, die hier mitgewirkt haben.
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
670 Beiträge
 
#20

AW: Drehsinn von Ebenen

  Alt 29. Okt 2015, 13:23
Du bist irgendwie so auf Matrix/Determinante fixiert. Vllt machst Du es doch mit dieser Flächenberechnung bzw Crossprodukt. Bis dahin...
Achtung: Bin kein Informatiker sondern komme vom Bau.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz