Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Kreisbogen durch drei Punkte


Philipp_Reitter - Mi 28.03.07 17:29
Titel: Kreisbogen durch drei Punkte
hi

Hoffe ich bin in der richtigen Sparte...

also erst mal ihr wisst sicher was ein (Um)Kreisbogen durch drei punkte ist?
(Ansonsten hier [http://www.geogebra.org/cms/index.php?option=com_content&task=blogcategory&id=70&Itemid=57] Webstart machen und dann bei den Kreiswerkzeugen nachschauen.)
ich bräucht ne Formel oder nen algo wie ich die einzelnen punkte in einem koordinatensystem,
also nicht das ganze einfach zeichnen auf eine Paint box oder so, herausfinden kann.
eben viele einzelne punkte...

währ toll wenn da jemand ideeen oder scripte dazu hat

Mfg


Dragonclaw - Mi 28.03.07 18:03

Guck dir mal diese Seite an: http://www.arndt-bruenner.de/mathe/scripts/kreis3p.htm Da steht wie du ne Kreisgleichung mit 3 gegebenen Punkten berechnest. Da ich aber es nicht in Delphi packe nen Gleichungsystem zu lösung kann ich dir da leider keine Tipps geben.


Wenn du das dann geschaft hast kannst du diese Funktion zeichnen

user profile iconArno Nym hat folgendes geschrieben:
Hi!
Auch noch Extrawünsche oder wat ??? :D
Also hier die End-Version der Funktion die auch gegen den Urzeigersinn zeichnen kann (startangle > endangle)

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
Procedure drawarc(C:TCanvas;X,Y,R:Integer;startangle,endangle:real);
var p1,p2: TPoint;
    factor,runner : real;
begin;
 //C.Rectangle(X-R,Y-R,X+R,Y+R);
 C.Pixels[X,Y] := clred;
 runner := startangle;
 p1.X := round(cos(runner)*(R-1)+X);
 p1.Y := Y-round(sin(runner)*(R-1));
 IF startangle < endangle Then factor := PI/R
 Else factor := -PI/R;
 While ((startangle < endangle) AND (runner < endangle))
 OR ((startangle > endangle) AND (runner > endangle))
 do begin;
  runner := runner + factor;
  p2.X := round(cos(runner)*(R-1)+X);
  p2.Y := Y-round(sin(runner)*(R-1));
  C.MoveTo(p1.X,p1.Y);
  C.LineTo(p2.X,p2.Y);
  P1 := P2;
 end;
end;


MFG, Arno Nym


Das Ganze wird mit aufgerufen

Delphi-Quelltext
1:
drawarc(Form1.Canvas,XWERTMITTELPUNKT,YWERTMITTELPUNKT,RADIUS,STARTWINKEL,ENDWINKEL);                    


Hoffe das hilft dir irgendwie.


delfiphan - Do 29.03.07 01:40

Du hast 3 Punkte. Damit lassen sich 2 Linien definieren. Wenn du die Mittelsenkrechte beider Linien miteinander schneidest hast du den Mittelpunkt des Kreises gefunden. Radius lässt sich per Pythagoras errechnen.


Philipp_Reitter - Fr 30.03.07 14:31

ok danke! der script gefällt mir ganz gut!!!