AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Vektor mit bestimmtem winkel erzeugen
Thema durchsuchen
Ansicht
Themen-Optionen

Vektor mit bestimmtem winkel erzeugen

Ein Thema von Antigo · begonnen am 21. Dez 2006 · letzter Beitrag vom 21. Dez 2006
Antwort Antwort
Antigo

Registriert seit: 14. Mär 2005
274 Beiträge
 
#1

Vektor mit bestimmtem winkel erzeugen

  Alt 21. Dez 2006, 13:59
Servus,
Ich hab grad ein totales Brett vorm Kopf. Ich möchte einen Vektor erzeugen, der eine bestimmte Länge und einen bestimmten Winkel (1-360°) hat.

Wie gehe ich da am besten ran? Über tan(alpha)=Gegen/ANkathete?

edit sry ganz vergessen, es geht um 2d vektoren. X1 und X2 sind also gesucht bei gegebenem WInkel und gegebener Länge.
Michael
"How should I know if it works? That's what beta testers are for. I only coded it."
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Vektor mit bestimmtem winkel erzeugen

  Alt 21. Dez 2006, 14:25
Die Länge eines Vektors kriegst du doch mit dem Pythagoras raus. Was meinst du mit Winkel? Winkel wozu?
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.883 Beiträge
 
Delphi 12 Athens
 
#3

Re: Vektor mit bestimmtem winkel erzeugen

  Alt 21. Dez 2006, 14:39
x := Cos(alpha) * laenge
y := Sin(alpha) * laenge

evtl. x und y vertauschen....must mal eben ausprobieren.
Du must mit double Werten Rechnen und dann nach int Konvertieren
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#4

Re: Vektor mit bestimmtem winkel erzeugen

  Alt 21. Dez 2006, 15:37
Zitat von QuickAndDirty:
evtl. x und y vertauschen
Nein
Zitat:
Du must mit double Werten Rechnen und dann nach int Konvertieren
In den allermeisten Fällen werden Vektorkoordinaten weiterhin als Fließkommazahl gespeichert.

@Cöster: Polarkoordinaten sind eine übliche Darstellung von Vektoren.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Antigo

Registriert seit: 14. Mär 2005
274 Beiträge
 
#5

Re: Vektor mit bestimmtem winkel erzeugen

  Alt 21. Dez 2006, 21:14
erstmal danke für eure Hilfe. meine Prozedur sieht jetzt so aus:

Delphi-Quellcode:
procedure TVektor.setzewinkel(alpha:double);
begin
 if alpha <= 0 then alpha:=360+alpha;
 x1:=cos(degtorad(alpha))*giblaenge;
 x2:=sin(degtorad(alpha))*giblaenge;
end;
meine Prozedur gibwinkel sieht so aus:
Delphi-Quellcode:
function TVektor.Gibwinkel2;
begin
  if x2 >= 0 then result:=radtodeg(arccos(x1/giblaenge))
  else result:=360-radtodeg(arccos(x1/giblaenge))
end;
Generell funktioniert das ganze auch. Zumindest ungefähr. Ich mache nun bei meinem kleinens SPielchen folgendes:

Delphi-Quellcode:
   
  kanone.vrohr.setzewinkel(45);
  showmessage(floattostr(kanone.vrohr.gibwinkel));
Ich setze den Winkel also auf 45 Grad und lasse ihne sofort danach ausgeben. Heraus kommt aber nicht 45 ° sondern
~50,76. Durch diese UNgenauigkeiten wird alles ziemlich unschön. Ich arbeite aber überall mit doppelter Genauigkeit. WIe kann ich da wo etwas verbessern? Ich danke schonmal im vorraus
Michael
"How should I know if it works? That's what beta testers are for. I only coded it."
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#6

Re: Vektor mit bestimmtem winkel erzeugen

  Alt 21. Dez 2006, 21:22
Wenn du innerhalb einer Prozedur Felder des Objektes veränderst, darfst du natürlich nicht erwarten, dass Funktionen immer noch den gleichen Wert zurückgeben.
if alpha <= 0 then alpha:=360+alpha; Überflüssig
Delphi-Quellcode:
if x2 >= 0 then result:=radtodeg(arccos(x1/giblaenge))
  else result:=360-radtodeg(arccos(x1/giblaenge))
Delphi-Referenz durchsuchenArcTan2
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Antigo

Registriert seit: 14. Mär 2005
274 Beiträge
 
#7

Re: Vektor mit bestimmtem winkel erzeugen

  Alt 21. Dez 2006, 21:40
Zitat von Khabarakh:
Wenn du innerhalb einer Prozedur Felder des Objektes veränderst, darfst du natürlich nicht erwarten, dass Funktionen immer noch den gleichen Wert zurückgeben.
if alpha <= 0 then alpha:=360+alpha; Überflüssig
Delphi-Quellcode:
if x2 >= 0 then result:=radtodeg(arccos(x1/giblaenge))
  else result:=360-radtodeg(arccos(x1/giblaenge))
Delphi-Referenz durchsuchenArcTan2
hmm jo das alpha zu verändern ist in der Tat überflüssig. Das mit dem Arctan2 gucke ich mir mal an, aber die bisherige Funktion liefert ja grundsätzlich auch das richtige, nur eben ungenau und das ist es was ich nicht verstehe...

edit: ok arctan2 ist eingebunden. meine gibwinkel prozedur sieht jetzt also so aus:

Delphi-Quellcode:
function TVektor.Gibwinkel2;
begin
  result:=radtodeg(arctan2(x2,x1));
end;
schonmal sehr viel einfacher danke

die setzewinkel haut jedoch immer noch nicht hin, aus 20 wird damit beispielsweise 23,xx
Michael
"How should I know if it works? That's what beta testers are for. I only coded it."
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#8

Re: Vektor mit bestimmtem winkel erzeugen

  Alt 21. Dez 2006, 21:57
Dann eben noch einen weiteren Hint zusätzlich zu meinem ersten Satz : TVektor.SetzeWinkel: x1 <-> GibLaenge
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Antigo

Registriert seit: 14. Mär 2005
274 Beiträge
 
#9

Re: Vektor mit bestimmtem winkel erzeugen

  Alt 21. Dez 2006, 22:03
unfassbar, den Fehler hab ich schon beim setzen der Länge begangen.

danke für die Aufklärung, nun passt es...
Michael
"How should I know if it works? That's what beta testers are for. I only coded it."
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz