Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 22:19

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



3Dworldto2D func macht nicht was sie soll

Discussion on 3Dworldto2D func macht nicht was sie soll within the AutoIt forum part of the Coders Den category.

Closed Thread
 
Old   #1
 
YatoDev's Avatar
 
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
3Dworldto2D func macht nicht was sie soll

Ich habe diese VB.Net funktion mit der ich in .Net bei meinem radar hack die position des punktes relativ zu mir auf dem radar ausrechne :
Code:
    Shared Function RadianToDegree(ByVal radian As Double) As Double
        Return (radian / 180) * Math.PI
    End Function
    Shared Function _3DWorldTo2DRadar(ByVal My_Position As Point, ByVal enemy_position As Point, ByVal YAW_Radian As Single, ByVal Radar_Breite As Single, ByVal Radar_Höhe As Single, ByVal Radius_2D As Integer) As Point
        Try
            Dim cosYaw As Single = Math.Cos(RadianToDegree(YAW_Radian))
            Dim sinYaw As Single = Math.Sin(RadianToDegree(YAW_Radian))

            Dim distanzX As Single = enemy_position.X - My_Position.X
            Dim distanzY As Single = enemy_position.Y - My_Position.Y

            Dim positionX As Single = ((distanzY * cosYaw - distanzX * sinYaw) * -1 / Radius_2D) + Radar_Breite / 2
            Dim positionY As Single = ((distanzX * cosYaw + distanzY * sinYaw) / Radius_2D) * -1 + Radar_Höhe / 2
            Return New Point(positionX, positionY)
        Catch ex As Exception
        End Try
    End Function
in autoit nutze ich diese aber es funktioniert nicht richtig. die punkte werden angezeigt aber nur je nach blickwinkel richtig:
Code:
Func _ToDegree($radian)
	Return ($radian/180)*3.14159265358979323846
EndFunc
Func _3Dto2D($my_posx,$my_posy,$other_posx,$other_posy,$yaw,$width,$height,$rad = 12)
	;MsgBox(0,"",$yaw & @CRLF & $my_posx & @CRLF & $my_posy & @CRLF & $other_posx & @CRLF & $other_posy)
	$cos=Cos(_ToDegree($yaw))
	$sin=Sin(_ToDegree($yaw))
	$distance_x=$other_posx-$my_posx
	$distance_y=$other_posy-$my_posy
	Local $pos[2]
	$pos[0]=(($distance_y*$cos-$distance_x*$sin)*-1/$rad)+$width/2
	$pos[1]=(($distance_x*$cos-$distance_y*$sin)/$rad)*-1+$height/2
	Return $pos
EndFunc
hoffe jemand weis wo drann es liegt ^^

BTW : wie macht man das mit dem doublebuffeed in GDI+ ?
YatoDev is offline  
Old 02/07/2014, 15:48   #2
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
Doublebuffering ist ganz einfach du packst einen Buffer über einen Buffer so das der Text einmal geschrieben wird und danach nicht mehr - im besten Falle - neu gezeichnet wird.
Sollte genug Beispiele im Netz geben.
alpines is offline  
Old 02/07/2014, 15:50   #3
 
YatoDev's Avatar
 
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
Quote:
Originally Posted by alpines View Post
Doublebuffering ist ganz einfach du packst einen Buffer über einen Buffer so das der Text einmal geschrieben wird und danach nicht mehr - im besten Falle - neu gezeichnet wird.
Sollte genug Beispiele im Netz geben.
habs genau so gemacht es wird aber nicht gezeichnet habs auch wie in beispielen gemacht es geht aber nicht
YatoDev is offline  
Old 02/07/2014, 16:25   #4
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
Dann nimm doch mal Beispiele wie es geht und übernehm das Konstrukt statt es selber zu schreiben.
alpines is offline  
Old 02/07/2014, 17:22   #5

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
Code:
Return ($radian/180)*3.14159265358979323846
Ich weiß nicht, wie stark AutoIt darauf achtet, würde aber mal schätzen, dass hier Integer durch Integer dividiert wird. Da der Radiant > 180 ist, kommt dann 0 raus. Wie siehts aus mit 180.0?
snow is offline  
Old 02/07/2014, 17:50   #6
 
YatoDev's Avatar
 
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
Quote:
Originally Posted by snow911 View Post
Code:
Return ($radian/180)*3.14159265358979323846
Ich weiß nicht, wie stark AutoIt darauf achtet, würde aber mal schätzen, dass hier Integer durch Integer dividiert wird. Da der Radiant > 180 ist, kommt dann 0 raus. Wie siehts aus mit 180.0?
leider hats nichts gebracht. Wäre nice wenn sich mal jemand mit ein wenig mehr wissen wie ich das anguckt. ich kann 720p livestreamen mit meiner leitung ^^
Bin mir allerdings schon ziemlich sicher das es an der funktion liegt die oben ist da die punkte ja teilweise korrekt angezeigt werden
YatoDev is offline  
Old 02/07/2014, 18:48   #7
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
Du kannst auch mit deiner Leitung 50 Gigapixel Livestreamen nur wie hoch die Bitrate ist ist eine gaanz andere Sache.
alpines is offline  
Old 02/07/2014, 18:58   #8
 
YatoDev's Avatar
 
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
Quote:
Originally Posted by alpines View Post
Du kannst auch mit deiner Leitung 50 Gigapixel Livestreamen nur wie hoch die Bitrate ist ist eine gaanz andere Sache.
sieht beim streamen fast genauso aus wie bei mir am bildschirm
YatoDev is offline  
Old 02/07/2014, 20:29   #9
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
Kommt trotzdem auf die Bildrate an und vorallem ob es komprimiert wird (ist meistens nicht der Fall) oder nicht.
alpines is offline  
Old 02/07/2014, 20:45   #10
 
YatoDev's Avatar
 
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
Übers streamen muss man sich nicht streiten. es ist 720p standard einstellung von open broadcaster für twitch und es sieht auch aus wie 720p (1280x720)

Ich hab mir jetzt coordinaten ausgeben lassen aus dem spiel und diese mal an die autoit func und an die vb func übergeben und bin am ende auf das ergebnis gekommen:
Code:
0.0190777286055944	-	round 8
-0.999818003574276	-	round 6
-101.559997558594	-	Int
-434.130004882813	-	Int
134.151977367895	-	Round 4
161.332377403686	-	89,00208
links sind die autoit ergebnisse , rechts die vb
round zahl ist die nachkommastelle.
Ich denke nicht das durch das nicht runden die func in autoit nicht mehr geht.
Int ist die convertierung in autoit von komma zahlen zu int dabei wird alles nach dem komma weggelassen.
Also das letzte ergebnis ist vollkommen falsch und in der regel ein zu großer wert allerdings weis ich nicht wie ich das beheben kann weil da ist doch kein unterschied in der formel ?

Edit :
Problem dank alpines jetzt gelöst. Er hat mir die .net funktion als native dll compiled die ich jetzt dafür verwende. In autoit scheint diese rechnung nicht möglich zu sein
YatoDev is offline  
Old 02/08/2014, 15:06   #11
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
radian in degree wandelt man doch mit folgender formel um:
Code:
radian*180/3.14
bzw optimiert:
Code:
radian*57.3
deine formel:
Code:
(radian/180)*pi
entspräche ja:
Code:
radian*0,017
was niemals zu einem korrekten ergebnis führen kann o0
lolkop is offline  
Old 02/08/2014, 16:10   #12
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,878
Quote:
Originally Posted by lolkop View Post
radian in degree wandelt man doch mit folgender formel um:
Code:
radian*180/3.14
bzw optimiert:
Code:
radian*57.3
deine formel:
Code:
(radian/180)*pi
entspräche ja:
Code:
radian*0,017
was niemals zu einem korrekten ergebnis führen kann o0
Ist mir auch schon aufgefallen er wandelt Deg in Rad um weil AutoIt Rad erwartet ebenso wie VB also ist die Benennung falsch.
Shadow992 is offline  
Old 02/08/2014, 17:36   #13
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
abgesehen von dem oben erwähnten formalen fehler, fällt beim direkten vergleich auch ein fehler in folgenden zeilen auf:
Code:
Dim positionY As Single = ((distanzX * cosYaw + distanzY * sinYaw) / Radius_2D) * -1 + Radar_Hoehe / 2
------------------------------------------------------------------------------------------------------
$pos[1] = (($distanzX * $cosYaw - $distanzY * $sinYaw) / $Radius_2D) * - 1 + $Radar_Hoehe / 2
Code:
distanzX * cosYaw + distanzY * sinYaw
-----------------------------------------
$distanzX * $cosYaw - $distanzY * $sinYaw
somit sollte auch klar sein, weshalb die y coordinate keinesfalls ein identisches ergebnis liefern kann
lolkop is offline  
Thanks
1 User
Old 02/08/2014, 19:34   #14
 
YatoDev's Avatar
 
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
Quote:
Originally Posted by lolkop View Post
radian in degree wandelt man doch mit folgender formel um:
Code:
radian*180/3.14
bzw optimiert:
Code:
radian*57.3
deine formel:
Code:
(radian/180)*pi
entspräche ja:
Code:
radian*0,017
was niemals zu einem korrekten ergebnis führen kann o0
die formel für degree ist so richtig ich kenn mich da auch nicht so aus die 3dworldto2d func ist aus google.
Cos und sin berechnen aus einem winkel vom dreieck welches halt 180° hat. Dann noch google stichwort "Thales kreis" und die formel ergibt sinn.
Gut das unsre mathe lehrerin sich mal entschieden hat was vernpnftiges zu machen xD
Ich bennen die func um damit sie nicht so irreführend ist
Quote:
Originally Posted by Shadow992 View Post
Ist mir auch schon aufgefallen er wandelt Deg in Rad um weil AutoIt Rad erwartet ebenso wie VB also ist die Benennung falsch.
siehe oben

Quote:
Originally Posted by lolkop View Post
abgesehen von dem oben erwähnten formalen fehler, fällt beim direkten vergleich auch ein fehler in folgenden zeilen auf:
Code:
Dim positionY As Single = ((distanzX * cosYaw + distanzY * sinYaw) / Radius_2D) * -1 + Radar_Hoehe / 2
------------------------------------------------------------------------------------------------------
$pos[1] = (($distanzX * $cosYaw - $distanzY * $sinYaw) / $Radius_2D) * - 1 + $Radar_Hoehe / 2
Code:
distanzX * cosYaw + distanzY * sinYaw
-----------------------------------------
$distanzX * $cosYaw - $distanzY * $sinYaw
somit sollte auch klar sein, weshalb die y coordinate keinesfalls ein identisches ergebnis liefern kann
mir und komischerweise keinem der coder in meiner skype liste ist das aufgefallen. da sieht man mal wie man an einem kleinen tippfehler scheitern kann.
YatoDev is offline  
Old 02/09/2014, 00:38   #15
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
Quote:
Originally Posted by »FlutterShy™ View Post
die formel für degree ist so richtig ich kenn mich da auch nicht so aus die 3dworldto2d func ist aus google.
Cos und sin berechnen aus einem winkel vom dreieck welches halt 180° hat. Dann noch google stichwort "Thales kreis" und die formel ergibt sinn.
Gut das unsre mathe lehrerin sich mal entschieden hat was vernpnftiges zu machen xD
was du hier schreibst is schlichtweg falsch.

ein einfacher blick in die autoit hilfe zur sin, cos oder tan funktion verrät uns:
Quote:
Code:
1 deg = pi / 180 rad
hierraus lassen sich entsprechend die funktionen zur umwandlung direkt ablesen.
entsprechend sollte klar sein, das die funktion welche du dort beschreibst, wie Shadow992 bereits sagte, eben deg in rad umwandelt und nicht anders herum. (es gibt übrigens in der math.au3 bereits funktionen zur umwandlung in beide richtungen)

Quote:
Originally Posted by »FlutterShy™ View Post
mir und komischerweise keinem der coder in meiner skype liste ist das aufgefallen. da sieht man mal wie man an einem kleinen tippfehler scheitern kann.
zum auffinden potentieller fehler, sollte man immer mit einer übersichtlichen syntax beginnen. insbesondere beim vergleich zweier funktionen macht es entsprechend sinn, potentielle variablen gleich zu benennen. sofern die thermaufstellung nicht voneinander abweicht, werden so eventuelle tippfehler sofort ersichtlich.

sollte dies nicht genügen, so sollte man versuchen sich über zwischenergebnisse (debugging) langsam an den fehler herann zu tasten. spätestens hier würde ersichtlich werden, in welcher zeile sich das problem befindet.


schlussendlich besteht bei deinem code wie bereits erwähnt noch optimierungspotential.
beispiel:
Code:
Func f1($x)
	Return $x*5*2*3
EndFunc
Func f2($x)
	Return $x*30
EndFunc
sicherlich liefern die funktionen f1 und f2 für jedes beliebige $x das gleiche ergebnis. während funktion f2 hierfür eine operation durchführen muss, benötigt funktion f1 aber vier operationen.

um derartige unnötige operationen zu vermeiden, solle jeder term möglichst weit vereinfacht werden (vereinfacht man f1, so erhält man f2).

dementsprechend sollte deine deg2rad funktion etwa so aussehen:
Code:
Func Deg2Rad($deg)
    Return $deg*0.017
Endfunc
auch code wie
Code:
$a * -1
sollte in jedem falle vermieden werden, da
Code:
-$a
zum beispiel komplett ohne operation auskommt, während die oben genannte alternative eine sinnfreie multiplikation ausführen muss.
lolkop is offline  
Closed Thread


Similar Threads Similar Threads
Func nach der func ausführen problem
08/15/2011 - AutoIt - 6 Replies
Hi, ich hab hier mal nen code schnipel der nicht funktioniert.. Die error Erkennung... if StringInStr($oWebTcp.body, "Du kannst nicht weitermachen...") Then GUICtrlSetData($list1, "Login failed. Please fix"&" = "&$array&" ANR: ")
[Fragen zu] Gui Hide & Show / Admin Rights / Func in Func
12/12/2010 - AutoIt - 29 Replies
Hi Leute, wie ihr oben ja bereits lesen könnt habe ich ein paar Fragen. 1. Könnte mir jmd. eine Hotkeyset-Func schreiben, womit ich mit nur einer (!) Taste die GUI verstecken und wieder anzeigen lassen kann ? 2. Gibt es etwas, dass dem gescripteten Tool von selbst Adminrechte verschafft? Ich rede NICHT von RequireAdmin, da muss man ja Administrator des PCs sein. €: Kann "#requireadmin" rausgezögert werden ?! Ich möchte, dass das passiert, aber erst, wenn ich einen Knopf gedrückt...
(Soll ich es machen )??Euch ne anleitung geben wie man nen Pserver macht andere NEU
04/27/2010 - Metin2 Private Server - 35 Replies
Ich weiß wie man nen metin2 Pserver auf ne andere weise erstellen kann ! Ganz recht ohne hamachi ! , Root ! , HomeRoot ! DyDns !!!
Neuer CPU aber Rechner macht net so ganz was er soll :D
03/20/2010 - Technical Support - 6 Replies
Moin, habe mir günstig ne QuadCore AMD Phenom II X4 Black Edition 965, 800 MHz zu gelegt. Denn ich dachte mir he Quadcore wird schon ne bischen schneller sein. Aber pustekuchen irgendwie habe ich das gefühl das er dern Rechner sogar ausbremmst. Zu meiner Hardware: Biostar GF8100 M2+ TE ; 2 GB DDR2-800 DDR2 SDRAM ; NVIDIA GeForce 9400 GT (1024 MB) So nun was soll ich tun ????
Warum Func. er nicht?
10/26/2009 - AutoIt - 11 Replies
Hallo Leute ich hab probiert mit Autoit 3 (SciTE Script Editor) ein kleinen Skript zu machen. Doch wenn ich ihn Starte kommt diese Fehler meldung: http://img3.jappys.eu/images/8PC38088.jpg Mein Skript sieht so aus: Da ist das zum ersten Mal mache kann ich nicht viel mit der Fehlermeldung anfangen.Wäre nett wenn ihr mir helfen könntet:D



All times are GMT +1. The time now is 22:19.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.