Seite 3 von 5

Verfasst: 11.11.2004 19:22
von Kaeru Gaman
btw: angle1+angle2 >= 0 ist zwar ne nette idee...

aber: bei angle1 = -5 und angle2 = 20 ....???????


... wie gesagt: erst testen, dann posten...

.. bei mir ist der test-requester gleich middebei :P

Verfasst: 11.11.2004 19:25
von MLK
tja ;-)

Verfasst: 11.11.2004 21:41
von NicTheQuick
Robert Wünsche hat geschrieben:
NicTheQuick hat geschrieben:ein paar billige Procedures
... stimmt !

Dein code aus dem codearchiv ist langsammer als meiner !
:mrgreen: :mrgreen: :mrgreen:
Soviel dazu !
Tja, das machts :wink: .

PS: Warn zwar nur ein paar millisekunden / 10000 benchs, aber egal!
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? :lol:

Verfasst: 11.11.2004 22:12
von Robert Wünsche

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))
Mein code ist mein code :mrgreen: , und deshalb ist er nicht uhrheberrechtlich geschützt !

OK nic !
Du hast gewonnen !
aber sau knapp !
Rob ist letzter !
Naja.

Ich kann meinen code ja auch noch optimieren !

Verfasst: 11.11.2004 22:22
von Ynnus

Code: Alles auswählen

  If grad.f = 0
    grad.f = 0
  Else
  EndIf 
Was gedenkst du denn mit dieser Textstelle zu erreichen? :?

Verfasst: 11.11.2004 22:29
von Robert Wünsche
ja was denn ?
:mrgreen:
Ich weiß, war sinnlos, damit wollte ich (eigentlich) die "variable ist nicht da" fehlermeflung im debuger vermeiden !
Egal !

Verfasst: 11.11.2004 22:43
von MVXA
dann erstell sie doch mit global grad.f vorher :freak:

Verfasst: 11.11.2004 23:15
von Kaeru Gaman
btw: bei mir ist

180/pi = 57.29577951

eure näherungen sind beide fehlerhaft >_<

und pi = 3.1415927 und nicht weniger :-P

Verfasst: 11.11.2004 23:48
von MLK
damit hättste gewonnen ;-)

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 
sofern der code an sich korrekt ist..

Verfasst: 11.11.2004 23:56
von Kaeru Gaman
*LOL*
MLK hat geschrieben:sofern der code an sich korrekt ist..
wieder mal erst geposted, dann getestet ???? :wink: