2 Prozeduren für 2D-Spiele - Winkel
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Wenn es nur ein paar Millisekunden Unterschied bei 10000 Tests waren, dann sind das wahrscheinlich eher Messfehler. Zeig doch mal deine Procedure. Von wegen urheberechtlich geschützt. Soll ich mal laut lachen?Robert Wünsche hat geschrieben:... stimmt !NicTheQuick hat geschrieben:ein paar billige Procedures
Dein code aus dem codearchiv ist langsammer als meiner !
![]()
![]()
![]()
Soviel dazu !
Tja, das machts.
PS: Warn zwar nur ein paar millisekunden / 10000 benchs, aber egal!

-
- Beiträge: 243
- Registriert: 29.08.2004 12:46
- Wohnort: Irgendwo im nirgendwo
- Kontaktdaten:
Code: Alles auswählen
#tests = 1000000
;robs code:
Procedure.f winkel(x1.f,y1.f,x2.f,y2.f)
a.f = x2-x1
b.f = y2-y1
c.f = Sqr(a*a+b*b)
winkel.f = ACos(a/c)*57.29577
If y1 < y2 : winkel=360-winkel : EndIf
ProcedureReturn winkel
EndProcedure
;und weils so schön ist noch nics
; Ermittelt den Winkel zwischen zwei Punkten
Procedure.f Object_GetAngle_Points(x1.f, y1.f, x2.f, y2.f)
Protected w.f
w = ATan((y2 - y1) / (x2 - x1)) * 57.295776
If x2 < x1
w = 180 + w
EndIf
If w < 0 : w + 360 : EndIf
If w > 360 : w - 360 : EndIf
ProcedureReturn w
EndProcedure
;und meiner !
;Routine zum bestimmen des Winkels
;x2 ist der punkt, der die mitte ist und von diesem die gradzahl bestimmt wird!
;y2
Procedure.f G_2d_Winkel (p_x1.f,p_y1.f,p_x2.f,p_y2.f)
grad.f =(1/((p_y1-p_y2)/(p_x1-p_x2)))
grad.f = ATan(grad.f)*57.29
ProcedureReturn grad.f
EndProcedure
;und jetzt das duel (lead the code) gggg
time = ElapsedMilliseconds()
Repeat
winkel(0,0,90,90)
test + 1
Until test > #tests
time1 = ElapsedMilliseconds() - time
test = 0
time = ElapsedMilliseconds()
Repeat
Object_GetAngle_Points(0,0,90,90)
test + 1
Until test > #tests
time2 = ElapsedMilliseconds() - time
test = 0
time = ElapsedMilliseconds()
Repeat
G_2d_Winkel(0,0,90,90)
test + 1
Until test > #tests
time3 = ElapsedMilliseconds() - time
MessageRequester("test - robs","Benchmark @ "+Str(#tests)+" Durchgängen :"+Str(time1))
MessageRequester("test - nics","Benchmark @ "+Str(#tests)+" Durchgängen :"+Str(time2))
MessageRequester("test - Robert Wünsches","Benchmark @ "+Str(#tests)+" Durchgängen :"+Str(time3))

OK nic !
Du hast gewonnen !
aber sau knapp !
Rob ist letzter !
Naja.
Ich kann meinen code ja auch noch optimieren !
Zuletzt geändert von Robert Wünsche am 11.11.2004 22:28, insgesamt 1-mal geändert.
Code: Alles auswählen
If grad.f = 0
grad.f = 0
Else
EndIf

-
- Beiträge: 243
- Registriert: 29.08.2004 12:46
- Wohnort: Irgendwo im nirgendwo
- Kontaktdaten:
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
damit hättste gewonnen 
sofern der code an sich korrekt ist..

Code: Alles auswählen
Procedure.f G_2d_Winkel (p_x1.f,p_y1.f,p_x2.f,p_y2.f)
ProcedureReturn ATan((1/((p_y1-p_y2)/(p_x1-p_x2))))*57.29
EndProcedure
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22