Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Robert Wünsche
Beiträge: 243 Registriert: 29.08.2004 12:46
Wohnort: Irgendwo im nirgendwo
Kontaktdaten:
Beitrag
von Robert Wünsche » 11.11.2004 18:56
ich benutze andere nur in extremen ausnamefällen !
(der text ist urheberrechtlich geschützt, also dürft ihr ihn mir nicht nachtragen !
)
MLK
Beiträge: 267 Registriert: 01.11.2004 13:17
Wohnort: Hamburg
Beitrag
von MLK » 11.11.2004 18:59
Kaeru Gaman hat geschrieben: ... aber geht auch einfacher:
stimmt!
Code: Alles auswählen
Procedure angle_is_close ( angle1.l, angle2.l, range.l )
If angle1+angel2 >= 0 And angle1 <= 360 And angle2 <= 360
Diff = Int(Abs(angle1-angle2))
ProcedureReturn (Diff < range)
Else
ProcedureReturn -1
EndIf
EndProcedure
Kaeru Gaman
Beiträge: 17389 Registriert: 10.11.2004 03:22
Beitrag
von Kaeru Gaman » 11.11.2004 18:59
...und als kleine zugabe :
Code: Alles auswählen
;**********************************************************
Procedure get_rotate_angle ( start_angle.l, end_angle.l )
Result.l
If start_angle >= 0 And start_angle <= 360 And end_angle >= 0 And end_angle <= 360
sign.l
Diff.l
Diff = end_angle-start_angle ; die Winkel-differenz
sign = 1
If Diff < 0 : Diff = -Diff : sign = -sign : EndIf
If Diff > 180 : Diff = 360-Diff :sign =-sign: EndIf
; den längeren weg genommen ? dann jetzt den kürzeren...
Result = sign*Diff
Else
Result = 0
EndIf
ProcedureReturn Result
EndProcedure
;**********************************************************
;testwerte hier einsetzen
a = 335
b = 25
d = get_rotate_angle( a, b )
out$ = "start_angle = " + Str(a) + Chr(10)
out$ + "end_angle = " + Str(b) + Chr(10)
out$ + "to rotate = " + Str(d)
MessageRequester("get_rotate_angle Testrun", out$ , 0)
...diese proc gibt null aus, wenn einer der beiden winkel <0 oder >360 ist,
oder wenn beide winkel gleich sind...
sonst den zu drehenden winkel...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Kaeru Gaman
Beiträge: 17389 Registriert: 10.11.2004 03:22
Beitrag
von Kaeru Gaman » 11.11.2004 19:02
@MLK:
ich habe PB 3.30... wenn ich mich recht entsinne, ging abs() nur mit floats (oder wars nich mit floats ???
)
... und die boole'schen ausdrücke funzen nich richtig...
sonst hätte ichs auch in eine zeile gepackt...
@Sunny
wollte dich ja auch nich vorführen....
... und wie du siehst, hat MLK noch einen draufgesetzt...
Zuletzt geändert von
Kaeru Gaman am 11.11.2004 19:05, insgesamt 1-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
MLK
Beiträge: 267 Registriert: 01.11.2004 13:17
Wohnort: Hamburg
Beitrag
von MLK » 11.11.2004 19:05
abs() liefert ne float zurück, int() macht sie dann wieder ganz. und boolsche ausdrücke gehen scheinbar nur mit floats nicht.
Zuletzt geändert von
MLK am 11.11.2004 19:08, insgesamt 1-mal geändert.
Kaeru Gaman
Beiträge: 17389 Registriert: 10.11.2004 03:22
Beitrag
von Kaeru Gaman » 11.11.2004 19:07
...neee...
hab eben gerade die koordinatenbegrenzung ausprobiert:
x + stp + 832*(x<-32) - 832*(x>800)
x ist als long definiert... funzt nich... oder hab ich mich da verproggt ?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Ynnus
Beiträge: 855 Registriert: 29.08.2004 01:37
Kontaktdaten:
Beitrag
von Ynnus » 11.11.2004 19:11
MLK hat geschrieben: Kaeru Gaman hat geschrieben: ... aber geht auch einfacher:
stimmt!
Code: Alles auswählen
Procedure angle_is_close ( angle1.l, angle2.l, range.l )
If angle1+angel2 >= 0 And angle1 <= 360 And angle2 <= 360
Diff = Int(Abs(angle1-angle2))
ProcedureReturn (Diff < range)
Else
ProcedureReturn -1
EndIf
EndProcedure
Bin ich jetzt zu blöd um das System zu verstehen, oder wie soll das Funktionieren?
Code: Alles auswählen
Procedure angle_is_close ( angle1.l, angle2.l, range.l )
If angle1+angel2 >= 0 And angle1 <= 360 And angle2 <= 360
Diff = Int(Abs(angle1-angle2))
ProcedureReturn (Diff < range)
Else
ProcedureReturn -1
EndIf
EndProcedure
Debug angle_is_close(300, 291, 2)
Debug angle_is_close(300, 303, 2)
Debug angle_is_close(300, 301, 2)
Ich erhalte alle 3 Mal den Wert 2 zurück, was soll ich denn bitte damit anfangen? Bei den ersten beiden Beispielen ist der Abstand größer, somit müsste das Ergebnis doch 0 oder -1 oder sowas sein. Beim 3ten Debugg ist es in der Reichweite, dennoch ist der Rückgabewert 2. Wie soll ich nun diese 2 von den anderen beiden unterscheiden?
Mir gibt deine Prozedur nur immer den Range-Wert zurück, was soll ich denn damit anfangen?
Kaeru Gaman
Beiträge: 17389 Registriert: 10.11.2004 03:22
Beitrag
von Kaeru Gaman » 11.11.2004 19:14
HA!
sage ich doch... boole'sche ausdrücke funzen nich richtig....
.... erst testen, dann posten
@MLK schönes beispiel... mit konstanten funzt es ja auch... nur nich mit variablen
@Sunny:
normalerweise sollte ein ausdruck in klammern seinen true/false wert liefern: boole'sche ausdrücke..
(5=5) = true = 1
(5=6) = false = 0
Zuletzt geändert von
Kaeru Gaman am 11.11.2004 19:17, insgesamt 1-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
MLK
Beiträge: 267 Registriert: 01.11.2004 13:17
Wohnort: Hamburg
Beitrag
von MLK » 11.11.2004 19:16
tatsache.. das geht nur solange ohne variablen gearbeitet wird:
Code: Alles auswählen
x=5
y=4
Debug 23*(x<4)
Debug 23*(x>4)
Debug 23*(5<4)
Debug 23*(5>4)
Debug 23*(x<y)
Debug 23*(x>y)
Debug 23*(5<y)
Debug 23*(5>y)
und der hier sollte aber gehen:
Code: Alles auswählen
Procedure angle_is_close ( angle1.l, angle2.l, range.l )
If angle1>= 0 And angle2 >= 0 And angle1 <= 360 And angle2 <= 360
Diff = Int(Abs(angle1-angle2))
If Diff <= range
ProcedureReturn 1
EndIf
Else
ProcedureReturn -1
EndIf
EndProcedure
Zuletzt geändert von
MLK am 11.11.2004 21:13, insgesamt 3-mal geändert.
Kaeru Gaman
Beiträge: 17389 Registriert: 10.11.2004 03:22
Beitrag
von Kaeru Gaman » 11.11.2004 19:20
... und damit ist es praktisch nutzlos....
... sagt jemand fred bescheid ?
fred ? bescheid !
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.