Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Analoge Rundinstrumente -bin ich zu doof?- (https://www.delphipraxis.net/127007-analoge-rundinstrumente-bin-ich-zu-doof.html)

ryLIX 6. Jan 2009 14:36


Analoge Rundinstrumente -bin ich zu doof?-
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi DPler,
es geht sich um folgendes.
Ich möchte Rundinstrumente zeichenen. Klingt nicht schwer weiß ich :roll:

Mein Problem liegt nun darin die Strichskala und den Zeiger zu zeichnen.
Ich mal in einem Panel da das ganze skalierbar bleiben soll, sich also mit der größe des Panels verändern soll.

Aber ich schaffs net die korrekten Punkte zu berechnen.
Bzw mit dem durchlaufen einer For Schleife die Skala zu zeichnen :wall:

Code:
x + Cos(winkel) * durchmesser
y - Sin(winkel) * durchmesser
Die Formel verstehe ich schon aber woher bekomme ich die Punkte x und y wenn die größe des Panels veränderbar ist?

Ich habe mal 2 Grafiken angehängt um einmal zu zeigen was ich bisher habe und was ich mir vorstelle.

jfheins 6. Jan 2009 14:53

Re: Analoge Rundinstrumente -bin ich zu doof?-
 
Ich schlage vor, du definierst dir erstmal passende Polarkoordinatenj.

Also sowas wie "Ursprung in der Mitte, Winkel von unten im Uhrzeigersinn positiv"

Dafür machst du dier dann Umrechnungsfunktionen (die kann dann auch direkt skalieren) und einen seperaten Typen TPolarPoint mit den Feldern radius und winkel. (Für die Skalierung kannst du den Radius zwischen 0 und 1 festlegen, und in der Umrechnung skalieren)

Bei dem Koordinatensystem von oben sähe die Umrechung z.B. so ähnlich aus:

Delphi-Quellcode:
function PolToKart(p: TPolPoint): TPoint;
begin
  var MitteX := Panel.Width/2;
  var MitteY := Panel.Height/2;
 
  var RadiusFaktor := Min(MitteX, MitteY);
 
  Result.X := MitteX - sin(p.Phi) * p.R * RadiusFaktor;
  Result.Y := MitteY + cos(p.Phi) * p.R * RadiusFaktor;
end;
Die Striche kannst du dann ja einfach zeichnen (Winkel gleich, Radius ändern ergibt einen Strich Richtung Mitte) indem du zuerst die Punkte festlegst, die dann umrechnest und dann auf das Canvas malst ;)

(Schwieriger wirds, wenn du auch Kreisbögen malen willst, dann musst du evtl. noch ein paar Zeichenfunktionen kapseln ...)

Grüße,
Julius

mkinzler 6. Jan 2009 14:54

Re: Analoge Rundinstrumente -bin ich zu doof?-
 
Statt / würde ich DIV verwenden

ryLIX 6. Jan 2009 15:00

Re: Analoge Rundinstrumente -bin ich zu doof?-
 
Hätte ich vorher erwähnen sollen das ich das ganze nich in Delphi schreib? :angel2:
Bin leider im Moment noch an VB gebunden :roll:

An die Sache mit dem Ursprung hatte ich auch schon gedacht.

Uwe Raabe 6. Jan 2009 15:04

Re: Analoge Rundinstrumente -bin ich zu doof?-
 
Zitat:

Zitat von ryLIX
Hätte ich vorher erwähnen sollen das ich das ganze nich in Delphi schreib?

Ja!

ryLIX 6. Jan 2009 15:32

Re: Analoge Rundinstrumente -bin ich zu doof?-
 
Hmm deswegen hab ich es eigentlich in "Programmieren allgemein" gepostet da die Beschreibung ja darauf hinweist das es nicht um Delphi geht.
Zitat:

Fragen, die sich beim Programmieren stellen und dennoch nichts mit Delphi zu tun haben.
Also auch insbesondere Fragen zu anderen Programmier- und Scriptsprachen.

jfheins 6. Jan 2009 15:38

Re: Analoge Rundinstrumente -bin ich zu doof?-
 
Okay, nicht gesehen :stupid:

Aber der Code da oben kompiliert bestimmt nicht in Delphi :P (Prism vll.)

Außerdem ist die Logik ja nicht von der Programmiersprache abhängig :mrgreen:

Mithrandir 6. Jan 2009 15:40

Re: Analoge Rundinstrumente -bin ich zu doof?-
 
Markus,
Ist ja auch alles richtig, und dich nagelt dafür hier keiner ans Kreuz. Und Julius hat dir ja geschrieben, wie man das machen könnte.

@Julius: Und ich hab mich schon gewundert. :mrgreen:

QuickAndDirty 6. Jan 2009 16:39

Re: Analoge Rundinstrumente -bin ich zu doof?-
 
Falls du dann später geschwindigkeits probleme bekommen solltest...du must nur für nen viertelkreis die
Koordinaten berechnen den Rest kannst du an Achsen durch den Mittelpunkt spiegeln. so sparst du dir die
Kreisfunktion Gleitkomma Operationen und die Umwandlung in integer.

turboPASCAL 6. Jan 2009 17:29

Re: Analoge Rundinstrumente -bin ich zu doof?-
 
[OT] :gruebel: Analoge Rundinstrumente ? Blockflöte ? :stupid: [/OT]


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:16 Uhr.
Seite 1 von 2  1 2      

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