Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit Canvas - Zeichnen einer Geraden (https://www.delphipraxis.net/51036-problem-mit-canvas-zeichnen-einer-geraden.html)

knusprig 4. Aug 2005 21:05


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:
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;
l ist dabei die Länge der roten Linie.

Hier der Aufruf in der main:
Delphi-Quellcode:
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;
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.

Ich hoffe ihr könnt mir da vielleicht helfen. Steh da echt auf der Leitung.

Luckie 4. Aug 2005 22:22

Re: Problem mit Canvas - Zeichnen einer Geraden
 
Zitat:

Zitat von knusprig
Klingt eigentlich ganz einfach. Aber ich hab da wohl irgendwo einen Fehler drin und find den ums verrecken nicht.

Aha. Interessant. Darf man dir auch noch entlocken, WAS für ein Fehler das ist?

knusprig 5. Aug 2005 07:15

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.

SirThornberry 5. Aug 2005 07:33

Re: Problem mit Canvas - Zeichnen einer Geraden
 
hast du mal debuggt welche Werte die einzelnen Variablen in deiner procedure "DrawLine" haben?

knusprig 5. Aug 2005 08:01

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.

SirThornberry 5. Aug 2005 08:05

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)

knusprig 5. Aug 2005 08:12

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 ;)

Mussfragen 5. Aug 2005 08:24

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 06:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz