[BraLUG] ein wenig Geometrie

Fred Koegler koegler.brb at t-online.de
Do Feb 8 15:57:58 CET 2007


Hallo Pixguine,

nach soviel Theorie ein "uraltes" praktisches Beispiel für eine Linie in einer 
Fläche, um die überladene Grafikbibliothek von Turbo-Pascal zu ersetzen.
(es funktioniert zumindest in 2D und sollte es auch in ähnlicher Form in 3D)

Gruß Fred

--- Pascal-Schnipp ---

procedure line(x1,y1,x2,y2,k:word);
label marke,return;
var f,x,y : real;
begin
range(x1,y1);
range(x2,y2);
x := int(x1);
y := int(y1);
dx:= int(x2)-x;
dy:= int(y2)-y;
if dx <> 0 then begin
  u := dy/dx;
  if abs(u)>1 then goto marke;
  if dx>0 then f:=1
  else begin
    f:=-1;
    u:=-u;
  end;
  while (x-0.5>x2)or(x+0.5<x2) do begin
    y := y+u;
    punkt(trunc(x),trunc(y),k);
    x := x+f;
  end;
  goto return;
end;
marke:
if dy <> 0 then begin
  u := dx/dy;
  if dy>0 then f:=1
  else begin
    f:=-1;
    u:=-u;
  end;
  while (y-0.5>y2)or(y+0.5<y2) do begin
    x := x+u;
    punkt(trunc(x),trunc(y),k);
    y := y+f;
  end;
end;
return:
end;

--- Pascal-Schnapp ---

Am Donnerstag, 8. Februar 2007 11:18 schrieb A Zapletal:
> > ok, jetzt ungefähr klar und da kommt mir gleich noch eine Idee dazu: ich
> > iteriere M immer weiter.... Also zuerst M von A und B. Im nächsten
> > Schritt jeweils M zwischen A/M und M/B usw.. Die ermittelten Ms sind
> > damit auch immer die Punkte, die ich anzeige....
>
> genau, das sollte auch gehen. Das wäre dann wohl das, was ich mir unter
> Intervall-Halbierung dachte. (Möglicherweise sind beide Methoden sogar
> identisch aufeinander abbildbar, mathematisch gesehen)
>
> Wenn du immer halbierst, musst du nur darauf achten, dass das M entweder
> selbst ein Gitterpunkt ist oder das wahre M liegt genau zwischen zwei
> (benachbarten) Gitterpunkten, dann nimmst du diese. (leichter selbst
> ausprobiert als erklärt ;)
>
> > stimmt und wäre doch dann ungefähr so, ich oben meinte, oder?
>
> das eine ja.
> Monte-Carlo ist was komplett anderes. Da nimmt man eine (beliebige)
> Konfiguration eines Pfades und lässt diesen mutieren. (zB einen Punkt
> zufallsgesteuert um eine Einheit verschieben). Dann schaut man ob die
> Situation besser geworden ist (dh Gesamtdistanz kürzer). Je nachdem
> macht man mit dem neuen Pfad oder mit dem alten weiter.
>
> Solange bis sich nichts mehr ändert. Sieht sicher auch gut aus, kann ich
> dir auch helfen, wenn nötig.
>
> Arnd




Mehr Informationen über die Mailingliste Bralug