![]() |
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:
Die Formel verstehe ich schon aber woher bekomme ich die Punkte x und y wenn die größe des Panels veränderbar ist?
x + Cos(winkel) * durchmesser
y - Sin(winkel) * durchmesser Ich habe mal 2 Grafiken angehängt um einmal zu zeigen was ich bisher habe und was ich mir vorstelle. |
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:
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 ;)
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; (Schwieriger wirds, wenn du auch Kreisbögen malen willst, dann musst du evtl. noch ein paar Zeichenfunktionen kapseln ...) Grüße, Julius |
Re: Analoge Rundinstrumente -bin ich zu doof?-
Statt / würde ich DIV verwenden
|
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. |
Re: Analoge Rundinstrumente -bin ich zu doof?-
Zitat:
|
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:
|
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: |
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: |
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. |
Re: Analoge Rundinstrumente -bin ich zu doof?-
[OT] :gruebel: Analoge Rundinstrumente ? Blockflöte ? :stupid: [/OT]
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:50 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 by Thomas Breitkreuz