28.06.2009, 00:54 | #1 (permalink) |
Registriert seit: 26.11.2008
Ort: Würzburg
Beiträge: 32
|
Tangens
Hallo erstma,
wie muss ich in einem script die gleichung schreiben, wenn ich von einem wert den tangens ermitteln möchte? weil mit "tan x" klappts nich, habs schon mit klammern und allen möglichen zeugs versucht aber funktioniert nicht... Is des überhaupt möglich? Weil ich möchte den tangens von einem Vektor, welchen ich dann als direction von einem Fahrzeug festlegen will. |
28.06.2009, 16:08 | #3 (permalink) |
Registriert seit: 26.11.2008
Ort: Würzburg
Beiträge: 32
|
danke für die antwort, nur leider krieg ich die funktion hier
[player, getpos dude] call BIS_fnc_dirTo net zum laufen, ich geb für player den namen von dem objekt ein das eine direction bekommen soll und für dude den namen von einem 2. objekt. Aber hier das script damit du mal siehst was ich meine Code:
_fhz = _this select 0 _fhz2 = _this select 1 _bomb = "smokeShell" createvehicle [(getpos_fhz select 0), (getpos_fhz select 1), (getpos_fhz select 2)] _bomb setpos [(getpos_fhz select 0), (getpos_fhz select 1), (getpos_fhz select 2)+6] _posx1 = (getpos_bomb select 0) _posy1 = (getpos_bomb select 1) _posz1 = (getpos_bomb select 2) #schleife _posx2 = (getpos_fhz2 select 0) _posy2 = (getpos_fhz2 select 1) _posz2 = (getpos_fhz2 select 2) _posX3 = (_posx2-_posx1) _posY3 = (_posy2-_posy1) _posZ3 = (_posz2-_posz1) _bug = (_posx3/_posy3) _dir = tan(_bug) playersideChatformat ["1% richtung, 2%",_dir, _bug] _bomb setvelocity [_posx3, _posy3, _posZ3] [_bomb ,getpos _fhz2] call BIS_fnc_dirTo _bombpos = getpos _bomb _fhzpos = getpos_fhz2 ? (_bombpos distance _fhzpos < 1):goto "fertig" goto "schleife" #fertig exit |
29.06.2009, 08:30 | #4 (permalink) |
Registriert seit: 17.01.2008
Beiträge: 267
|
getpos_fhz select 0
hmm du bist ein bisschen zu sparsam mit den Leerzeichen. so: getPos _fhz select 0 playersideChatformat... gibt es auch nicht sondern: player sideChat format... So sehn diese Winkel und Vektorberechnungen normalerweise bei mir aus. Glaub ich muss trotzdem auch ma die BIS-funktionen antesten. Code:
_pos1 = getposasl _obj1; _pos2 = getposasl _obj2; _xdis = (_pos2 select 0) - (_pos1 select 0); _ydis = (_pos2 select 1) - (_pos1 select 1); _zdis = (_pos2 select 2) - (_pos1 select 2); _dir = _xdis atan2 _ydis; _xydis = sqrt((_xdis*_xdis)+(_ydis*_ydis)); _dirup = _xydis atan2 _zdis; _xdir = sin _dir; _ydir = cos _dir; if ((sin _dirup) == 0) then {_dirup = _dirup +1}; _zdir = ((1 / sin _dirup) * cos _dirup);
__________________
|
03.07.2009, 16:48 | #5 (permalink) |
Registriert seit: 26.11.2008
Ort: Würzburg
Beiträge: 32
|
ah danke, sowas wie den atan2 hab ich gesucht. Funktionieren tun deine berechnungen, jedoch versteh ich nahezu nur bahnhof von dem was du da alles rumrechnest um _zdir zu bekommen. Außerdem versteh ich auch nicht wo man _zdir einsetzen soll. Könntest du mir bitte noch erklären was ich tun muss mit _zdir? Ach ja, ich bin eig. nich sparsam mit den leerzeichen, jedoch waren alls ich das script kopiert hab, keine mehr drinnen und ich hab vergessen wieder alle reinzusetzen. Geändert von nooblike (03.07.2009 um 19:03 Uhr). |
03.07.2009, 17:11 | #6 (permalink) |
Registriert seit: 17.01.2008
Beiträge: 267
|
Code:
_zdir = ((1 / sin _dirup) *(cos _dirup); Und naja was du mit zdir tun musst, hängt davon ab was du vorhast. Zdir ist die Höhenachse des Richtungsvektors den ich hier berechne. Ich persönlich benutz das Script für zielgelenkte Raketen, also reichen x und y koordinaten natürlich nicht aus. Angewendet könnte z.B. so aussehen: Code:
_fact = 100; //geschwindigkeit _ob1vecup = vectorup _obj1; _obj1 setvectorup [_ob1vecup select 0,_ob1vecup select 1,(_obj1vecup select 2)-_zdir]; _obj1 setvectordir [_xdir,_ydir,_zdir]; _obj1 setvelocity [_xdir*_fact,_ydir*_fact,_zdir*_fact];
__________________
|
04.07.2009, 17:43 | #7 (permalink) |
Registriert seit: 26.11.2008
Ort: Würzburg
Beiträge: 32
|
Ops, kp wieso da ne klammer is die da nich hingehört. Das mit ob1vecup und obj1vecup, da haste dich vertan oder muss man für die höhe doch noch extra was berechnen??? Also und was ich immernoch nich verstanden hab is, du machst den pytaguras und hast dann die länge der hypotenuse, den abstand von obj1 zu obj2. Jedoch was ich überhaupt nich versteh is wieso du die länge brauchst und diese dann quasie durch den höhenunterschied der beiden objekte teilst und daraus den tangens ziehst. Mir fällt keine formel dafür ein die das bräuchte? (hab grad erst meinen realschulabschluss hinter mir also bin kein mathestudent der da voll durchblickt) Also wenn du wenigstens die Formel mit hinschreiben könntest, damit ich den sinn verstehe wäre mir sehr geholfen. Auch weiß ich leider nicht wieso (1/sin x) * cos x diese formel kenn ich ebenso wenig, hab dazu auch im netz nix gefunden. Um ehrlich zu sein hab ich sogar den ganzen tag versucht dahinter zu kommen, was du eig. ausrechnest. weil das was da rauskommt is ja nichmal nen winkel sondern kryptisch^^ Also ich wäre dir wirklich sehr verbunden wenn du mir einfach die formel nach der du da gearbeitet hast hinschreibst. Mfg Daniel |
05.07.2009, 11:52 | #8 (permalink) |
Registriert seit: 02.07.2009
Alter: 36
Beiträge: 18
|
Mathematisch gesehen: sinx/cosx = tanx --> cosx/sinx = 1/tanx = cot x Tangens und Kotangens ? Wikipedia Mehr kann ich dir auch nicht sagen da ich mich mit Skripting nicht auskenne |
06.07.2009, 08:19 | #9 (permalink) |
Registriert seit: 17.01.2008
Beiträge: 267
|
zu 100% weiß ich auch nichtmehr was ich da alles gemacht hab, ist schonwieder n weilchen her. Aufjedenfall funktioniert es wohl.
Vectorup und Vectordir sind etwas vertrackt manchmal, zumindest bei den Raketen. Notfalls einfach rumprobieren bis es klappt.
__________________
|
09.07.2009, 18:55 | #10 (permalink) |
Registriert seit: 26.11.2008
Ort: Würzburg
Beiträge: 32
|
aahh, jetzt fällt es mir wie schuppen von den augen, jedoch auch nur zu 50%. Dank Bulletsbreath weiß ich jetzt wie die umwandlung von statten ging. Nur des Vectorup/dir is mir immernoch nen rätsel, anscheinend fliegt meine rakete bei dem script nämlich sogar nen paar mal um mein flieger herum oder neben dran vorbei bis es den entgültig erwischt.
Sowas darf ja damit eig. nich sein, aber gut was solls, war sowieso nur für testzwecke. Nun denn, herzlichen dank an euch das ihr mir geholfen habt |
10.07.2009, 21:15 | #11 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Winkel.sqs
Code:
;//Testskript für atan2 Befehl [Vienna, 14.03.2009] ;//=========================== ;//Parameter: [Objekt1,Objekt2] ;// ;//Aufruf [Objekt1,Objekt2] exec "Winkel.sqs" ;//Funktion welche den Winkel des 2.Objekts zum 1.Objekt zurückgibt (ident zum Kompass des 1.Objekts). ;//Aufruf [Objekt1,Objekt2] call _winkel _winkel={private"_w";_w=((getPos(_this select 1)select 0)-(getPos(_this select 0)select 0))atan2((getPos(_this select 1)select 1)-(getPos(_this select 0)select 1));if(_w<0)then{_w=_w+360};floor _w}; ;//Ausgabe des Winkels player groupchat format ["%1 Grad",_this call _winkel]; |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|