Entwickler-Ecke
Multimedia / Grafik - Einen Kreisbogen berechnen
Marco D. - Mi 12.07.06 21:21
Titel: Einen Kreisbogen berechnen
Im Anhang eine Image-Komponente mit folgenden Canvas-Anweisungen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| with image1.Canvas do begin MoveTo(0,0); LineTo(image1.Width div 3,image1.Height); MoveTo(0,0); LineTo(image1.Width,image1.Height div 3); end; |
Jetzt würde ich gerne die beiden Linien mit einen Kreisbogen verbinden, dass es aussieht wie ein Pizzastück. Nur weiß ich nicht mal im Ansatz wie man das lösen könnte. Hilfe!
Chryzler - Mi 12.07.06 21:56
Hi,
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| uses Math; var rot, r: Single; x, y: Integer; begin r := Sqrt(Sqr(Image1.Width) + Sqr(Image1.Height div 3)); rot := 0; Image1.Canvas.MoveTo(Image1.Width, Image1.Height div 3); repeat rot := rot + 0.05; x := Round(Cos(GradToRad(rot)) * r); y := Round(Sin(GradTorad(rot)) * r); if (y >= Image1.Height div 3) and (y <= Image1.Height) then Image1.Picture.Bitmap.Canvas.LineTo(x, y); until rot >= 90; end; |
Bei dem "rot := rot + 0.05;" kannst du für "0.05" auch andere Werte nehmen. Je kleiner, desto genauer die Kurve.
Chryzler
LLCoolDave - Mi 12.07.06 21:59
Gibts für Kreisstücke nicht auch direkt eine Methode der Canvas? Schau mal durch ob du was bei den Methode findest.
Marco D. - Mi 12.07.06 22:00
LLCoolDave hat folgendes geschrieben: |
Gibts für Kreisstücke nicht auch direkt eine Methode der Canvas? Schau mal durch ob du was bei den Methode findest. |
Es gibt Ellipse, Arc ... Aber ich kann sie nicht so anwenden, dass es passt...
Lannes - Mi 12.07.06 23:58
Hallo,
wenn das Image quadratisch ist, dann:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| var r : Integer; begin with image1.Canvas do begin r := Round(Sqrt(Sqr(Image1.Width) + Sqr(Image1.Height div 3))); pie(-r,-r,r,r,image1.Width div 3,image1.Height,image1.Width,image1.Height div 3); end; |
Marco D. - Do 13.07.06 14:19
Lannes hat folgendes geschrieben: |
Hallo,
wenn das Image quadratisch ist, dann:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| var r : Integer; begin with image1.Canvas do begin r := Round(Sqrt(Sqr(Image1.Width) + Sqr(Image1.Height div 3))); pie(-r,-r,r,r,image1.Width div 3,image1.Height,image1.Width,image1.Height div 3); end; | |
Danke das funktioniert so. ;)
Nur würdest du mir den Quellcode bitte erklären? Es geht nicht um die Befehle sondern mehr um das Wie ;)
Chryzler - Fr 14.07.06 21:47
r ist die Länge der beiden Linien (siehe
SATZ DES PYTHAGORAS). Mehr kann ich dir im Moment auch nicht sagen, schau doch mal in der Hilfe bei TCanvas.Pie nach. :wink:
Marco D. - Fr 14.07.06 21:54
Chryzler hat folgendes geschrieben: |
Mehr kann ich dir im Moment auch nicht sagen |
Hast du den Code nicht selber geschrieben oder was? Wenn nicht, bennene bitte mal deine Quelle, vielleicht werde ich da ja fündig ;)
Lannes - Fr 14.07.06 22:59
Hallo,
der Kreismittelpunkt deines Kreissektors den Du zeichnen willst liegt in der linken oberen Ecke des TImage,
also bei 0|0.
Die Prozedur Pie
procedure Pie(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Longint);
erwartet in den ersten vier Parametern(X1|Y1 links/oben und X2|Y2 rechts/unten) die Definition des Rechtecks das den Vollkreis umgibt.
Will man ein Rechteck, mit 0|0 als Mittelpunkt, definieren muss man nach links und oben mit Minuswerten, nach unten und rechts mit Pluswerten arbeiten.
Vom Mittelpunkt(0|0) des Rechtecks(Kreises) werden die zwei Seitenbegrenzungen des Sektors in Richtung der Punkte X3|Y3 und X4|Y4 gezeichnet.
Im Anhang befindet sich eine Grafik, der gelbe Bereich ist das TImage.
(ein Bild sagt mehr als tausend Worte :wink: )
Marco D. - Sa 15.07.06 12:51
Danke, jetzt verstehe ich's.
Chryzler - Sa 15.07.06 14:19
Marco D. hat folgendes geschrieben: |
Chryzler hat folgendes geschrieben: | Mehr kann ich dir im Moment auch nicht sagen |
Hast du den Code nicht selber geschrieben oder was? Wenn nicht, bennene bitte mal deine Quelle, vielleicht werde ich da ja fündig ;) |
Ich glaube du hast da was verwechselt... :D
Sieh mal genau hin, wer welchen Code geschreiben hat.
Chryzler 8)
Marco D. - Sa 15.07.06 14:20
Jup ich sehs ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!