Entwickler-Ecke
Sonstiges (Delphi) - Windrose
Alex_ITA01 - Mi 15.09.04 09:03
Titel: Windrose
Hallo erstmal...
ich wollte mal fragen, ob irgendjemand ne coole Idee hat, eine grafische Anzeige der Windrichtung darzustellen (z.B. eine Windrose)?!
Ich habe in einer Variablen die aktuelle Gradzahl (z.B. 0° entspricht Süden...)
Könnte mir da jemand helfen?
Danke schonmal im voraus
.Chef - Mi 15.09.04 10:13
Also ich geh jetzt mal von folgenden Annahmen aus, die zwingend notwendig sind, damit wir nicht aneinander vorbeireden:
- 0 Grad ist Osten (mathematisch so üblich, kannst du später ändern)
- horizontal liegt die x-Achse, positives Ende im Osten
- vertikal liegt die y-Achse, positives Ende im Süden (wegen Canvas)
Ich erklär jetzt am Beispiel der Hauptrichtungen, wie du die Windrose zeichnest. Du brauchst dann für die Nebenrichtungen nur genauso vorzugehen, nur mit anderen Winkeln und Radien.
Also: Du hast zwei Radien, den inneren (Knick) und den äußeren (Spitze). Mit Hilfe von Sinus und Cosinus berechnest du die x und y Werte, die du dann nur noch mit PolyLine zeichnen musst.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var r1 : Integer; r2 : Integer; p : array[0..8] of TPoint; a : Integer; begin r1:=50; r2:=10; p[0].x:=Round(sin(0*pi/180)*r1); p[0].y:=Round(cos(0*pi/180)*r1); |
Hier wird der erste Punkt berechnet (Ostspitze). Das pi/180 könntest du in dem Fall weglassen. Es soll nur verdeutlichen, dass du Grad in Radiant umrechnen musst. So musst du nun mit jedem Punkt verfahren, sinnigerweise in einer Schleife. Zu jedem Wert wird dann nochmal r1 addiert, damit die Windrose auch vollständig zu sehen ist:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| for a:=0 to 3 do begin p[a*2].x:=Round(sin(a*pi/2)*r1)+r1; p[a*2].y:=Round(cos(a*pi/2)*r1)+r1; end; for a:=0 to 3 do begin p[a*2+1].x:=Round(sin((a*90+45)*pi/180)*r2)+r1; p[a*2+1].y:=Round(cos((a*90+45)*pi/180)*r2)+r1; end; p[8]:=p[0]; Image1.Canvas.PolyLine(p); |
Routine ist ungetestet, kann also Schönheitsfehler enthalten.
Wenn du dann deine Windrose (mit Haupt- und Nebenrichtungen gezeichnet hast, kannst du nach dem selben Prinzip einen Pfeil darüberzeichnen, der die aktuelle Richtung angibt.
Gruß,
Jörg
Alex_ITA01 - Mi 15.09.04 10:21
jo danke das sieht schonmal sehr gut aus.ich werde noch einiges da reinbauen müssen (also pfeil und sowas)
danke nochmal
Alex
Alex_ITA01 - Mi 15.09.04 10:42
nochmal ne frage:
bekomme ich auch irgendwie hin, das ich noch eine "kleine" windrose in die ecken der großen zeichne? also im prinzip das ich zwei Stück habe die um 45° versetzt sind?!
Danke
Alex
Delete - Mi 15.09.04 13:26
Ich will ja nichts sagen, aber in der DP hat er mittlerweile ein komplettes Demo Projekt bekommen. Da es wieder mal ein Crossposting war ohne das die Postings verlinkt wurden.... :evil:
.Chef - Mi 15.09.04 13:55
Alex_ITA01 hat folgendes geschrieben: |
nochmal ne frage:
bekomme ich auch irgendwie hin, das ich noch eine "kleine" windrose in die ecken der großen zeichne? also im prinzip das ich zwei Stück habe die um 45° versetzt sind?! |
Selbes Prinzip, wie du schon sagtest "um 45 Grad versetzt". Nimm kleinere Radien, und zeichne die versetzte Windrose zuerst, damit sie unter den Hauptrichtungen liegt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!