![]() |
Vektor mit bestimmtem winkel erzeugen
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. |
Re: Vektor mit bestimmtem winkel erzeugen
Die Länge eines Vektors kriegst du doch mit dem Pythagoras raus. Was meinst du mit Winkel? Winkel wozu?
|
Re: Vektor mit bestimmtem winkel erzeugen
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 |
Re: Vektor mit bestimmtem winkel erzeugen
Zitat:
Zitat:
@Cöster: Polarkoordinaten sind eine übliche Darstellung von Vektoren. |
Re: Vektor mit bestimmtem winkel erzeugen
erstmal danke für eure Hilfe. meine Prozedur sieht jetzt so aus:
Delphi-Quellcode:
meine Prozedur gibwinkel sieht so aus:
procedure TVektor.setzewinkel(alpha:double);
begin if alpha <= 0 then alpha:=360+alpha; x1:=cos(degtorad(alpha))*giblaenge; x2:=sin(degtorad(alpha))*giblaenge; end;
Delphi-Quellcode:
Generell funktioniert das ganze auch. Zumindest ungefähr. Ich mache nun bei meinem kleinens SPielchen folgendes:
function TVektor.Gibwinkel2;
begin if x2 >= 0 then result:=radtodeg(arccos(x1/giblaenge)) else result:=360-radtodeg(arccos(x1/giblaenge)) end;
Delphi-Quellcode:
Ich setze den Winkel also auf 45 Grad und lasse ihne sofort danach ausgeben. Heraus kommt aber nicht 45 ° sondernkanone.vrohr.setzewinkel(45); showmessage(floattostr(kanone.vrohr.gibwinkel)); ~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 :) |
Re: Vektor mit bestimmtem winkel erzeugen
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.
Delphi-Quellcode:
Überflüssig
if alpha <= 0 then alpha:=360+alpha;
Delphi-Quellcode:
if x2 >= 0 then result:=radtodeg(arccos(x1/giblaenge))
else result:=360-radtodeg(arccos(x1/giblaenge)) ![]() |
Re: Vektor mit bestimmtem winkel erzeugen
Zitat:
edit: ok arctan2 ist eingebunden. meine gibwinkel prozedur sieht jetzt also so aus:
Delphi-Quellcode:
schonmal sehr viel einfacher danke :)
function TVektor.Gibwinkel2;
begin result:=radtodeg(arctan2(x2,x1)); end; die setzewinkel haut jedoch immer noch nicht hin, aus 20 wird damit beispielsweise 23,xx |
Re: Vektor mit bestimmtem winkel erzeugen
Dann eben noch einen weiteren Hint zusätzlich zu meinem ersten Satz ;) : TVektor.SetzeWinkel: x1 <-> GibLaenge
|
Re: Vektor mit bestimmtem winkel erzeugen
unfassbar, den Fehler hab ich schon beim setzen der Länge begangen. :wall:
danke für die Aufklärung, nun passt es... :oops: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz