| Autor |
Beitrag |
F34r0fTh3D4rk
      
Beiträge: 5285
Erhaltene Danke: 29
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mi 19.07.06 15:59
hi, ich möchte gerne einen winkel (zb 90°) in einen 2D Vektor mit der Länge 1 umrechnen. nun hab ich das ganze mal so gemacht:
Delphi-Quelltext 1: 2: 3: 4:
| function angle_to_v2d(angle: single): TVector2D; begin result := to_v2d(cos(degtorad(angle)), sin(degtorad(angle))); end; |
eigentlich sollte dort immer ein vektor der länge 1 herauskommen (was wohl auch der fall ist), aber erstens sind x und y vertauscht (was ich mir nicht erklären kann Oo [tauschen wäre ja kein ding]) und es kommen komische werte heraus.
für 0° kommen x = 1 und y = 0 heraus, wenn mans tauscht noch korrekt
für 90° kommen x = 6,12303176911189E-17 und Y = 1 heraus
dabei müsste das ergebnis doch x = 0 und y = 1 lauten Oo
wie behebe ich das ? was mach ich falsch ?
danke
|
|
Arno Nym
      
Beiträge: 131
|
Verfasst: Mi 19.07.06 17:48
Hi!
also erstmal ist die Methode verwirrend da ein Vektor nicht einen Winkel repräsentieren kann. Bei dir ist der zweite Vektor implizit die positive X-Achse (1,0)
also berechnest du ein nach dem Winkel umgestelltes Skalarprodukt.
| Zitat: |
für 90° kommen x = 6,12303176911189E-17 und Y = 1 heraus
dabei müsste das ergebnis doch x = 0 und y = 1 lauten Oo
|
da spielt dir einfach mal die Rechenungenauigkeit einen Streich
6,12303176911189E-17 ist 0,..(16 nullen)..123... also fast 0.
Mit freundlichen Grüßen,
Arno Nym
|
|
F34r0fTh3D4rk 
      
Beiträge: 5285
Erhaltene Danke: 29
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mi 19.07.06 17:53
ich möchte einen richtungsvektor, der die richtung des winkels hat, beispiel:
Quelltext 1: 2: 3: 4:
| / / / 45°) ------- |
angenommen ich habe den winkel, dann möchte ich den vektor der länge 1, der eben dieser diagonale entspricht.
wozu das ganze ? ich beschreibe eine physikalische geschwindigkeit durch einen 2D Vektor, wenn ich jetzt aber sagen möchte, jo 45° da lang, dann muss ich das ja erst umrechnen und mit dem betrag der jetzigen geschwindigkeit skalieren.
mfg
|
|
alias5000
      
Beiträge: 2145
WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
|
Verfasst: Mi 19.07.06 18:06
Ach jetzt hab ichs ihm grad in ICQ gesagt, davor isser noch offline gegangen. Seit mir net böse, wenn ich jetzt einfach meine paar Worte hier rein kopier (damit allen der Zugang zu einer potentiellen Lösung offen steht):
[18:57] alias5000: also wenn dein "Bezugsvektor" immer die x-Achse iss, wärs ja einfach:
[18:57] alias5000: mit x=1 und y=1 bekommst du den 45-Winkel
[18:57] alias5000: Länge des Vektors ist Wurzel(2)
[19:00] alias5000: also musst du nur noch die X und Y Koordinaten durch Wurzel(2) teilen
[19:00] alias5000: dann bekommst du die Länge zwei
[19:00] alias5000: äh eins
Gruß alias5000
_________________ Programmers never die, they just GOSUB without RETURN
|
|
F34r0fTh3D4rk 
      
Beiträge: 5285
Erhaltene Danke: 29
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Do 20.07.06 15:36
ich möchte aber nicht rumraten bis ich den richtigen vektor habe und normalisieren kann ich ja auch, mir gehts um die berechung, die so nicht richtig funktioniert.
|
|
alias5000
      
Beiträge: 2145
WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
|
Verfasst: Do 20.07.06 15:44
Ja willste jetzt einen Vektor fabrizieren, der einen Winkel zu einer waagerechten Gerade hat, oder einfach eine beliebige Stellung?
_________________ Programmers never die, they just GOSUB without RETURN
|
|
F34r0fTh3D4rk 
      
Beiträge: 5285
Erhaltene Danke: 29
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Do 20.07.06 17:02
der winkel ist relativ zur x-achse, wobei oben 0° ist
|
|
|