Autor Beitrag
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 29

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 29

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 19.07.06 17:53 
ich möchte einen richtungsvektor, der die richtung des winkels hat, beispiel:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
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)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 29

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
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)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 29

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Do 20.07.06 17:02 
der winkel ist relativ zur x-achse, wobei oben 0° ist