0 Daumen
923 Aufrufe

Aufgabe:

Im Rahmen einer Programmieraufgabe muss ich mich mal wieder mit mathematischen Verfahren auseinander setzen. Kleinere Schritte konnte ich bereits bewältigen, doch für das weitere Vorgehen fehlt mir gerade der Ansatz. Es geht um ein Zeigermessgerät, wo ich den Grad des Zeigers berechnen soll. Um es zu verstehen widmete ich mich erstmal der Theorie.

image.jpg

Als erstes würde ich gerne den Bereich unten ausrechnen um den Grad von 360 Grad abziehen zu können, damit ich nur noch den Grad zwischen Minimum und Maximum habe. Den zu gezeichneten Ausschlag kann man hier ignorieren.
Problem/Ansatz:

Nun habe ich bereits Beispiels Koordinaten (X|Y) für Min, Max, Center und den Pointer. Mithilfe einer Geradengleichung habe ich dann den unteren Punkt der grünen Linie berechnen können. Anhand des folgenden Bildes sieht man über welche X|Y Koordinaten ich aktuell verfüge.

bsp.png

Nun bin ich mir aber unsicher, wie ich die im obigen Bild gekennzeichneten Winkel mithilfe dessen was ich bereits habe berechnen könnte.

Das hier wären meine Beispielskoordinaten, welche oben als grüne Punkte eingezeichnet sind.

minPoint = [103,288]
maxPoint = [294,291]
centerPoint = [203, 208]
pointerPoint = [106,291]
hilfsLinie = [191|291] ist der Grüne Punkt zwischen Minimum und maximum

Ich würde mich freuen, wenn mir jemand ein wenig aushelfen könnte


Viele Grüße

Avatar von

3 Antworten

0 Daumen
 
Beste Antwort

Hallo,

zuerst würde ich glatte Koordinaten für den Mittelpunkt wählen, also (200;200).

Dann würde ich die Länge r des Zeigers vorgeben, z.B. r=150.

Die Richtung senkrecht nach unten würde ich mit dem Winkel 0° vorgeben.

Dann gehören zu den Zeigerstellungen eindeutige Winkel.

0 → 45°

50 → 180°

100 → 315°

Die Position der Zeigerspitze kann nun mit Sinus und Cosinus berechnet werden.

:-)

Avatar von 47 k
0 Daumen

Du hast bei 50 psi einen Winkel (des Zeigers zur Senkrechten im Uhrzeigersinn) von 0 Grad und bei ca. 83 psi einen Winkel von 90 Grad. Damit kann man inter- und extrapolieren.

Avatar von 45 k

Habe das Gerät in vier Quadranten eingeteilt und mithilfe dessen, das Problem gelöst. Aber vielen Dank für den Ansatz

Habe das Gerät in vier Quadranten eingeteilt und mithilfe dessen, das Problem gelöst.

das ist so mit eine der schlechtesten Lösungen für dieses Problem. Wegen genau so einer Sch***programmierung hatte ich schon mal die Gelegenheit über einen Zeitraum von drei Monaten einen Programmierfehler zu suchen. Aber ist lange her, heute macht das keiner mehr; dachte ich jedenfalls ;-)

Lösungsvorschlag: bilde die Vektoren von der Mitte zum Minimum, Maximum und zur aktuellen Position des Zeigers, Dann berechne aus den Vektoren ihr Skalar- und Vektorprodukt bezogen auf das Minimum (der 0-Wert). Anschließend füttere mit diesen Werten die ARCTAN2-Funktion Deiner Programmiersprache. Die liefert Dir dann einen eindeutigen Wert im Vollkreis, aus dem man dann den gewünschten Winkel des Zeigers bzw. den Wert auf der Anzeige berechnen kann.

Um Vorzeichen brauchst Du Dir hier keine Sorgen machen, da Dein Koordinatensystem bereits linksdrehend (Pixelkoordinaten nehme ich an) und die Anzeige ebenfalls links drehend ist. Das hebt sich gegenseitig wieder auf.

0 Daumen

Entgegen den Sofortratschlägen der Kollegen würde ich erstmal klären

- Programmieren womit

- welches graphische Koordinatensystem verwendet die Grafik-Engin, Nullpunkt?

- welcher Drehrichtung folgen Winkelangaben

Ein Zeiger ist quasi ein Vektor im Ursprung des KO - etwa

Z=r (cos(phi+p_0),sin(phi+p_0))

wobei p_0 den 0-Anschlag darstellt.

dann kann es los gehen.

Was ist Sache?

Avatar von 21 k

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Mathelounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community