| |
Fortgeschrittene ProgrammierungMittelwerte von Gradzahlen (Winkel 0-360) als Tipp, ggf andere Ideen? | | | Autor: Hakiri | Datum: 24.02.15 20:59 |
| Wenn man Gradzahlen (Kompasswerte 0 – 360) als Messreihe aufnimmt und den Mittelwert bilden möchte, dann geht es nicht so einfach, indem man die Summe bildet und dann durch die Anzahl der Datensätze teilt. Wenn sich die Messwerte um die Wert 0/360 herum bewegen wird es zu Fehlern kommen.
Es bleibt einem also nichts anderes übrig, über die Winkelfunktion COS und Sin die jeweiligen x/y Anteile zu übermitteln, diese dann auf zu addieren, daraus den Schnitt bilden und am Ende mittels Arcus Tangens den Winkel zu ermitteln, und dann noch von die Randbedingungen zu überprüfen, da es immer zwei Lösungen gibt, denn ATN liefert nur Werte von -90 bis + 90.
Das folgende Beispiel beinhaltet eine Funktion, um dies zu lösen, das Datenarray dient hier als Beispiel und könnte dann übergeben werden.
Dim V As Variant
Dim i As Long, c As Long
Dim X As Double, Y As Double
Dim W As Double
V = Array(359, 358, 360, 2, 1) ' V = Array(200, 201, 202, 199, 198)
X = 0: Y = 0
For i = LBound(V) To UBound(V)
X = X + Sin(V(i) * Pi / 180)
Y = Y + Cos(V(i) * Pi / 180)
c = c + 1
Next i
X = X / c: Y = Y / c
If Y = 0 Then
W = IIf(X > 0, 90, 270)
Else
W = Atn(X / Y) * 180 / Pi
If Y > 0 Then
If W < 0 Then W = W + 360
Else
W = W + 180
End If
End If
Debug.Print Format(W, "###0.0") Martin Domian
CioTec Ltd
F37 Waterfront Studios 1 Dock Road
London E16 1AH United Kingdom
Tel.: +44 7810 255482
Mail: MDomian@ciotec.de
URL: http://www.ciotec.de
UTR 64446 15259 (Unique Taxpayer Reference) Company No 10914665
Beitrag wurde zuletzt am 24.02.15 um 21:06:00 editiert. | |
Re: Mittelwerte von Gradzahlen (Winkel 0-360) als Tipp, ggf andere Ideen? | | | Autor: Manfred X | Datum: 26.02.15 08:20 |
| Die Bestimmung des mittleren Winkels könnte eventuell
einfach dadurch gelöst werden, daß die Winkel-Grade geeignet
transformiert werden - im Beispiel zu: 359, 358, 360, 362, 361
Eindeutig ist das ggf. nicht.
Der Mittelwert zwischen 90 Grad und 270 Grad kann als
0 Grad oder als 180 Grad aufgefasst werden.
Beitrag wurde zuletzt am 26.02.15 um 08:24:07 editiert. | |
Re: Mittelwerte von Gradzahlen (Winkel 0-360) als Tipp, ggf andere Ideen? | | | Autor: Hakiri | Datum: 26.02.15 11:03 |
| @Dieter, ja das kannst Du, wenn niemandem etwas einfacheres einfällt.
@Manfred.
zu 1) Die Überlegung hatte ich auch, aber man kann nicht definieren oder ermitteln, ob 360° hinzuaddiert werden müssten, bzw. müsste es an Hand der Messwerte "vermuten"
Zu 2) Bei zwei Mittelwerten die genau gegenüberliegen lässt es sich mit keinem Verfahren ermitteln. Wäre aber für die Mittelwert Bildung einer Messreihe nur theoretisch, bzw. die Messwerte dürften bei solchen Schwankungen unbrauchbar sein
Ich habe im Netz schon einiges gesucht und leider nichts passendes gefunden.
Martin Domian
CioTec Ltd
F37 Waterfront Studios 1 Dock Road
London E16 1AH United Kingdom
Tel.: +44 7810 255482
Mail: MDomian@ciotec.de
URL: http://www.ciotec.de
UTR 64446 15259 (Unique Taxpayer Reference) Company No 10914665
| |
Re: Mittelwerte von Gradzahlen (Winkel 0-360) als Tipp, ggf andere Ideen? | | | Autor: Manfred X | Datum: 26.02.15 13:41 |
| [I]Die Überlegung hatte ich auch, aber man kann nicht definieren oder ermitteln,
ob 360° hinzuaddiert werden müssten, bzw. müsste es an Hand der Messwerte "vermuten"[/I]
Dem Problem entgehst Du auch bei Deinem Vorschlag nicht.
Man müßte einen Grenzwert festlegen, bis zu dem bei kleinen Gradzahlen 360 addiert wird,
falls weitere Werte im Array vorkommen, die im Bereich: größer 360 Minus Grenzwert liegen.
| |
Re: Mittelwerte von Gradzahlen (Winkel 0-360) als Tipp, ggf andere Ideen? | | | Autor: Zardoz | Datum: 26.02.15 14:38 |
| Hallo Martin,
das wäre mein Vorschlag ohne trigonometrische Funktionen:
Dim Winkel As Double, Diff As Double, S As Double
Dim i As Long, Wnk As Variant
'Wnk = Array(359, 358, 360, 2, 1)
Wnk = Array(201, 202, 199, 198, 200)
S = 0
For i = 1 To UBound(Wnk)
Diff = (Wnk(0) - Wnk(i) + 3600) Mod 360
If Diff > 180 Then
S = S + 360 - Diff
Else
S = S - Diff
End If
Next i
S = Wnk(0) + S / (UBound(Wnk) + 1)
Winkel = S - 360 * (S \ 360)
MsgBox "Mittelwert: " & Format$(Winkel, "0.0"), vbInformation + vbOKOnly Wenn die Eingangswerte Nachkommastellen haben, muss man noch den
Mod-Operator ersetzen, was aber kein Problem ist.
Gruss,
Zardoz | |
Re: Mittelwerte von Gradzahlen (Winkel 0-360) als Tipp, ggf andere Ideen? | | | Autor: Hakiri | Datum: 27.02.15 10:25 |
| Moin!
Das ist eine prachtvolle Idee und das Berechnen dürfte auch erheblich schneller sein
Auf Ganzzahlen kann man sich ggf einlassen, ansonsten einfach
Int(Messwert*10)
und dann Mod 3600, bzw 360 durch 3600 ersetzen
am Ende /10 und dann wäre es auf eine Gleitkommastelle ermittelt, was dann völlig ausreichend ist
Danke
Martin
Martin Domian
CioTec Ltd
F37 Waterfront Studios 1 Dock Road
London E16 1AH United Kingdom
Tel.: +44 7810 255482
Mail: MDomian@ciotec.de
URL: http://www.ciotec.de
UTR 64446 15259 (Unique Taxpayer Reference) Company No 10914665
| |
Re: Mittelwerte von Gradzahlen (Winkel 0-360) als Tipp, ggf andere Ideen? | | | Autor: Manfred X | Datum: 28.02.15 07:43 |
| Meines Erachtens wäre zunächst die Ermittlung der Punktelage
in den Quadranten erforderlich.
Alle Punkte müssen innerhalb von einem oder innerhalb von zwei
benachbarten Quadranten liegen - sonst sollten Meßfehler bei der
Winkelbestimmung angenommen werden.
Liegen alle Punkte im 1. und 4. Quadranten wird bei der
Mittelwertbestimmung für die Punkte im ersten Quadranten 360 summiert.
Liegt der berechnete Mittelwert über 360 wird 360 abgezogen.
| |
Re: Mittelwerte von Gradzahlen (Winkel 0-360) als Tipp, ggf andere Ideen? | | | Autor: Hakiri | Datum: 05.03.15 23:01 |
| Ja, man sicher davon ausgehen, dass die Meßwerte maximal innerhalb zwei Quadranten liegen, und dann hast Du recht, dann kann man so vorgehen, es gibt dann ja nur vier Fälle.
Martin Domian
CioTec Ltd
F37 Waterfront Studios 1 Dock Road
London E16 1AH United Kingdom
Tel.: +44 7810 255482
Mail: MDomian@ciotec.de
URL: http://www.ciotec.de
UTR 64446 15259 (Unique Taxpayer Reference) Company No 10914665
| |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|