Einen Bogen Zeichnen

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
ulhau
Beiträge: 65
Registriert: Sa 27. Okt 2007, 13:27
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Seebergen

Einen Bogen Zeichnen

Beitrag von ulhau »

Hallo Leute!

Ich suche eine Procedure mit der ich einen Bogen zeichnen kann. Es ist nicht so das ich nicht wüsste wie es geht oder wo es steht. Jedenfalls die Standardprocedure:

(Im folgenden Beispiel wird das obere Viertel eines Kreisbogens gezeichnet und in das aktuelle Fenster eingepasst.

procedure TForm1.FormPaint(Sender: TObject);
var
R: TRect;
begin
R := GetClientRect; {Gets the boundaries of the current window}
Canvas.Arc(R.Left, R.Top, R.Right, R.Bottom, R.Right, R.Top, R.Left, R.Top);
end;)


- ist nicht gerade das was ich brauchen würde. Ich suche eher etwas wie das hier:

Canvas.MyArc(XAlt, YAlt, XNeu, YNeu, Radius);

Diese Procedure müsste halt die gesamte Berechnung übernehmen und den Bogen genau dahin zeichnen wo ich es angegeben habe. Ich frage halt lieber mal ehe ich das Rad neu erfinden muß. Das würde dann zwar auch fahren aber mit ziemlich eckigen rädern. :cry:
Die Suche nach Bogen führt hier im Forum zum Beispiel zu "Schnulli's Witze", da kann man sich aber nur "Krumm Lachen". :P
Die Suche nach Kreis oder Zeichnen bringt auch nicht wirklich das was ich möchte.

Also, wenn jemand sowas kennt wäre das schon prima. :P
Ich arbeite mit Lazarus 0.9.23 Beta mit fpc 2.2.1 und Lazarus 0.9.25 Beta mit fpc 2.3.1 für Windows.

Ansonsten "Grusel". :shock:

Achso nochwas zum Project: Ich hab mir ein Tool programmiert mit dem ich Autocad-Scriptdateien (für Drehteile) erzeugen kann, die dann später auf einem Rechner mit installiertem Autocad weiter bearbeitet werden können. Das Teil selbst arbeitet zwar auch ohne grafische Darstellung, aber ich habe mir eben vorgenommen den Kram auch grafisch darzustellen(in einer PaintBox), also welches element gerade gezeichnet wird. Mit Linien ist das absolut kein Problem, aber die Bögen(Radien)... :cry:

Ich hänge halt mal ein Bildchen an, wie das gemeint ist und wie das bis jetzt schon aussieht.

Also dann, schon mal Danke wenn mir jemand helfen kann. Und wenn nicht, na dann... :wink:

Tschüsssss!
Dateianhänge
Scriptedit.jpg

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Hallo uhlau!

Ich glaube, Arc ist schon das Richtige für dich:

http://lazarus-ccr.sourceforge.net/docs ... s.arc.html" onclick="window.open(this.href);return false;

Probier hier mal die erste Funktion. Mit dem Winkelparameter kannst du bestimmen, welches Kreissegment gezeichnet wird.
Wichtig: Einen Kreis mit frestem Radius erhältst du, wenn du die vier festzulegenden Punkte so wählst, dass durch sie ein Quadrat mit einer Seitenlänge, die dem doppelten gewünschten Radius entspricht, gebildet wird.
(zumindest, wenn ich das gerade richtig überschaut habe)

Einen Vollkreis gibt es leichter über den Befehl Canvas.Ellipse.

Viele Grüße, Euklid

ulhau
Beiträge: 65
Registriert: Sa 27. Okt 2007, 13:27
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Seebergen

Beitrag von ulhau »

Dankeschön Euklid.

Ich habe da auch noch was gefunden. Das ist eine Procedure aus der Unit "DelGraph" und die ist hier: http://www.mathesoft.de, zu finden. Das soll schon so in der graph.tpu von Turbopascal gestanden haben.

Hier mal die Procedure:

Code: Alles auswählen

procedure Arc(x,y:Integer;StAngle,EndAngle,Radius:word);
 
    procedure GetAx(winkel:word; var sina,cosa:real);
       var radw:real;
           begin
              radw:=winkel*pi/180;sina:=sin(radw); cosa:=cos(radw) ;
           end;
 
var sSin,sCos,eSin,eCos:real;
 
begin
  GetAx(StAngle,sSin,sCos);
  GetAx(EndAngle,eSin,eCos);
  Myscreen.Arc(x-radius,y-radius,x+radius,y+radius,
               x+round(sCos*radius),y-round(sSin*radius),
               x+round(eCos*radius),y-round(eSin*radius));
end;
Diese Procedure benötigt zwei Punkte, einen Start- und einen Endwinkel sowie den Radiuswert. Wenn ich das mal schnell überdenke brauche ich blos anhand meiner Start- und Endpunkte den Viertelkreisvektor zu ermitteln, Start- und Endwinkel berechnen, dazu noch zwei Punkte und schon bin ich fast da wo ich hin will. :roll:

Allerdings ist das trotzdem noch ein schei..... Mathepuzzle. :shock: Aber ich denke mal ich gebe auf, da schon was fertiges zu finden. :?

Na, dann auf zum rollenden Viereck. :lol:

Tschüssss !

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

wie währe es mit Polygonen ? Das dürfte genau das Richtige sein für dich.
Nach einem Bogen sieht das aber auf dem Bild nicht aus...
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Gibts nicht irgendwo ne Funktion um Beiträge von bestimmten Benutzern auszublenden ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

*LOL*, hast ja recht, Pologone sind dafür ungeeignet ! Ich dachte nur weil Polgone ganz einfach Punkte mit einander Verbinden ! und das Bild ist ja ehrer Eckig als Rund....

Aber ich verstehe dich *heute*....
MFG
Michael Springwald

ulhau
Beiträge: 65
Registriert: Sa 27. Okt 2007, 13:27
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Seebergen

Beitrag von ulhau »

Hallo!

Pluto hat geschrieben:
Nach einem Bogen sieht das aber auf dem Bild nicht aus...
Noch nicht Pluto. Noch nicht... :lol:

Aber der Anfang ist gemacht und ich bleibe mal dran. :wink:

Tschüsss!
Dateianhänge
BogenTest.jpg

ulhau
Beiträge: 65
Registriert: Sa 27. Okt 2007, 13:27
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Seebergen

Beitrag von ulhau »

Hallo!

So, ich glaube das war's jetzt. Mir reichts erst mal. Ich glaube ich hab's geschafft. :lol: Die Übergänge sind zwar noch ein bissel hackig aber mir langt das erst mal so. Bisher teile ich einen Kreis in vier Quadranten und ermittele den im Viertelkreis enthaltenen und geforderten Radius. Das mit dem Halbkreis mach dann später mal. :roll:
Es sei denn, es hat jemand schon was fertiges für mich, dann schmeiß ich alles wieder über Bord. Bis dahin erkläre ich das Thema halt für erledigt. 8)

Tschüsss!
Dateianhänge
Scriptedit2.jpg

bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Beitrag von bembulak »

Ein AutoCad-Erweiterung in Lazarus? Cool! TwoThumbsUp!

Antworten