Einzelnen Beitrag anzeigen

Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#8

Re: Informatik-Projekt: 4x4x4

  Alt 22. Nov 2008, 16:02
Alternative: Für das Zeichnen der Polygone müssen dir ja die Eckpunkte bekannt sein. Mithilfe einer PointinPoly-Funktion kannst du dann schnell überprüfen, ob ein Punkt (der Mauszeiger) in einem Polygon liegt. Bei 4x4x4 Polygonen dürfte das ausreichend schnell sein. Wenn es noch schneller sein muss, kannst du erstmal überprüfen, über welcher Ebene dein Mauszeiger ist (grob, anhand des umgebenden Rechtecks). Dann musst du nur noch 16 Polygone vergleichen. Du könntest nun nochmal z.B. auf vier Quadranten einschränken, so dass du im Zweifelsfall ~6 Polygone mit PointinPoly überprüfen musst. Ob sich der Aufwand aber für die Geschwindigkeit lohnt, wage ich zu bezweifeln - es sei denn, du willst aus 4x4x4 später mal 200x200x200 machen .

Delphi-Quellcode:
function PointinPoly(P: Tpoint): boolean;
var
  hnd: hdc;
begin
  hnd := CreatePolygonRgn(PolyArray, AnzahlPunkte, Winding); // Polygonregion erstellen
  Result := PtInRegion(hnd, p.x, p.y); // Testen, ob Punkt drin
  DeleteObject(hnd); // freigeben Objekt
end;
PolyArray ist dabei ein Array of TPoint, AnzahlPunkte ein Integer mit der Anzahl der Punkte im Array. WINDING eine Windows-Konstante (ALTERNATE wäre die andere, passt aber hier nicht).

Mfg

Codewalker
  Mit Zitat antworten Zitat