![]() |
Problem mit Canvas - Zeichnen einer Geraden
Liste der Anhänge anzeigen (Anzahl: 1)
Nabend,
ich habe da ein kleines Problem mit dem Zeichnen einer Geraden in einem Koordinatensystem. Das ganze soll dann so aussehen wie in dem angehängten Bild die rote Linie. Klingt eigentlich ganz einfach. Aber ich hab da wohl irgendwo einen Fehler drin und find den ums verrecken nicht. Hier der Code: Die Prozedur soll die Gerade zeichnen:
Delphi-Quellcode:
l ist dabei die Länge der roten Linie.
procedure TSchieber.DrawLine(Canvas: TCanvas; a,l,r: double);
begin //Berechnung der Strecke b b := sqrt(abs(sqr(l)-sqr(a))); //Berechnung der Koordinaten canvas.MoveTo(center.x, center.y - trunc(b)); canvas.LineTo(center.x + trunc(a), center.y); end; Hier der Aufruf in der main:
Delphi-Quellcode:
l wird vom Benutzer eingegeben. r ist in diesem Fall hier nicht wichtig und nicht zu beachten. a ist der Abstand vom Nullpunkt bis zu dem Punkt, wo l die x-Achse berührt. b das gleiche für die y-Achse.
procedure TForm1.Button1Click(Sender: TObject);
begin mySchieber.l := strtofloat(wertsetzen.valueset.edit_l.text); mySchieber.r := strtofloat(wertsetzen.valueset.edit_r.text); mySchieber.DrawLine(Bmp.Canvas,300,mySchieber.l*SCALE,mySchieber.r*SCALE); paintbox.refresh; end; Ich hoffe ihr könnt mir da vielleicht helfen. Steh da echt auf der Leitung. |
Re: Problem mit Canvas - Zeichnen einer Geraden
Zitat:
|
Re: Problem mit Canvas - Zeichnen einer Geraden
Hm, sorry. Das is natürlich wichtig :)
Also die gerade wird nicht gezeichnet. Es erscheint am oberen Rand der Paintbox (in die das alles reingezeichnet werden soll) ein Punkt bzw ein waagerechter Strich (je nachdem wie groß a übergeben wird). Also es erscheint zwar was, aber nicht da wo es geplant war. |
Re: Problem mit Canvas - Zeichnen einer Geraden
hast du mal debuggt welche Werte die einzelnen Variablen in deiner procedure "DrawLine" haben?
|
Re: Problem mit Canvas - Zeichnen einer Geraden
Ja, hab ich. Die Werte passen alle. Das is ja gerade das was mich so stutzig macht. Die Werte werden richtig aus den Eingabefelder gezogen und der berechnete Wert b passt auch.
|
Re: Problem mit Canvas - Zeichnen einer Geraden
ich meinte mehr das du mal debuggen sollst welche Werte die Übergabeparameter von "Canvas.MoveTo" und "Canvas.LineTo" haben. Anhand dieser Werte fällt es vielleicht dann leichter zu erfahren wo der Berechnungsfehler ist (oder eventuell nur etwas vertauscht)
und welchen Wert hat CenterY? Wenn die Linie immer nur ganz oben ist scheint da auch ein Fehler zu sein. Außerdem musst du vielleicht noch bedenken das in einem normalen Koordinantensystem Y nach oben größer wird, bei der Canvas das ganze aber umgekehrt ist (das wird auch der Fehler sein) |
Re: Problem mit Canvas - Zeichnen einer Geraden
Also ich hab noch in einem Labels alle betroffenen Werte anzeigen lasse. Center ist der 0-Punkt des Koordinatensystems. Auch diese Werte passen.
Der Wert für y wird nach oben kleiner oder? Deshalb ziehe ich auch b von center.y ab. Wie mach ich das genau mit dem Debuggen. Sorry für die dumme Frage, hab ich aber noch nie gemacht ;) |
Re: Problem mit Canvas - Zeichnen einer Geraden
Hallo,
die y-Werte bitte als negativ-Wert übergeben dürfte die Lösung sein |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz