Seite 1 von 2

[HILFE]QuickBasic Code übersetzen 'InBetween'

Verfasst: 16.12.2018 16:48
von Mijikai
Brauche Hilfe beim Übersetzen von QuickBasic code. :coderselixir:

Code:

Code: Alles auswählen

' Returns 0 if on line, negative for left, positive for right
DEF FNib(a0,a1,b0,b1) = (a0 < b1) AND (a1 > b0)
Wie würde das in PureBasic aussehen (Macro)?

Re: [HILFE]QuickBasic Code übersetzen 'InBetween'

Verfasst: 16.12.2018 17:16
von mk-soft
Mal testen...

Code: Alles auswählen

; Returns 0 If on line, negative For left, positive For right
; DEF FNib(a0,a1,b0,b1) = (a0 < b1) And (a1 > b0)

Macro FNib(a0,a1,b0,b1)
  Bool((a0 < b1) And (a1 > b0))
EndMacro

Re: [HILFE]QuickBasic Code übersetzen 'InBetween'

Verfasst: 16.12.2018 18:07
von Mijikai
@mk-soft danke werde es testen :)

Re: [HILFE]QuickBasic Code übersetzen 'InBetween'

Verfasst: 16.12.2018 21:04
von DarkDragon
Aber der Kommentar darüber sagt eigentlich was anderes als der Code. Ist das nun eher so gemeint wie im Code oder eher wie im Kommentar?

Re: [HILFE]QuickBasic Code übersetzen 'InBetween'

Verfasst: 16.12.2018 21:11
von Mijikai
DarkDragon hat geschrieben:Aber der Kommentar darüber sagt eigentlich was anderes als der Code. Ist das nun eher so gemeint wie im Code oder eher wie im Kommentar?
Der Code ist ok.

Re: [HILFE]QuickBasic Code übersetzen 'InBetween'

Verfasst: 18.12.2018 21:11
von Imhotheb
gibt bool() auch negativ aus?

Re: [HILFE]QuickBasic Code übersetzen 'InBetween'

Verfasst: 18.12.2018 21:49
von mk-soft
Nein.

Bool(Assert) gibt immer nur #True (1) oder #False (0) zurück...
Somit kann man auch rechnen.

Code: Alles auswählen

Define r1, r2
Define val1, val2

val1 = 10
Val2 = 20

r1 = 100 * Bool(val1 < val2)
r2 = 1000 * Bool(val1 > val2)

Debug "r1 = " + r1
Debug "r2 = " + r2
:wink:

Re: [HILFE]QuickBasic Code übersetzen 'InBetween'

Verfasst: 18.12.2018 22:43
von Imhotheb
Danke für die Aufklärung ... eigentlich sollte das hauptsächlich als Denkanstoß gelten ... da im Kommentar vermerkt ist: "negativ für links"

Re: [HILFE]QuickBasic Code übersetzen 'InBetween'

Verfasst: 19.12.2018 15:51
von Derren
Imhotheb hat geschrieben:Danke für die Aufklärung ... eigentlich sollte das hauptsächlich als Denkanstoß gelten ... da im Kommentar vermerkt ist: "negativ für links"
Ich verstehe den Code/Kommentar auch nicht.
Offenbar soll geprüft werden, ob ein Punkt auf irgendeiner Linie liegt ("0 if on line"). Aber erstens reicht es dann nicht aus zu prüfen ob die Koordinaten dazwischen liegen, zweitens würde man dafür 3 Punkte benötigen. Zwei Punkte, die die Linie definieren und dann der zu testende Punkte.
Und drittens, und das ist das komische, werden offenbar x-Werte von A mit y-Werten von B verglichen.

Wenn ich jetzt keinen kompletten Denkfehler habe, dann demonstriert dieser Code hier alle "validen" Punkte A, für die der Code "true" ausspucken würde, wenn B an der Position des Cursors ist.

Code: Alles auswählen

OpenWindow(0,0,0,400,400,"inbetween?",#PB_Window_SystemMenu)
CanvasGadget(0,0,0,400,400)

Repeat
	e=WaitWindowEvent()
	If e=#PB_Event_Gadget
		If EventGadget()=0
			If EventType()=#PB_EventType_MouseMove

				StartDrawing(CanvasOutput(0))				
				Box(18,18,364,364,$000000)
				Box(20,20,360,360,$FFFFFF)

				For a0 = -180 To 180
					For a1 = -180 To 180
						
						b0=GetGadgetAttribute(0, #PB_Canvas_MouseX)
						b1=GetGadgetAttribute(0, #PB_Canvas_MouseY)						
						
						If a0<b1 And a1>b0 ;Hier die Prüfung "FNib"
							
							x=a0
							y=a1
							
							Plot(x+200, 200-y, RGBA(255,0,0,50)  )
						EndIf						
					Next
				Next				
				
				Line(199,0,1,400,$000000):Line(200,0,1,400,$000000)
				Line(0,199,400,1,$000000):Line(0,200,400,1,$000000)
				
				StopDrawing()
				
			EndIf 
		EndIf 
	EndIf 	
Until e=#PB_Event_CloseWindow
End 

Re: [HILFE]QuickBasic Code übersetzen 'InBetween'

Verfasst: 19.12.2018 22:41
von GPI
kann es sein, das beim original-code a0, a1, b0,b1 keine Integer-Variablen sind, sondern klassen oder sonstiges?

Ich seh da auch keinen Sinn in den Code und wüsste auch nicht, wozu man das gebrauchen könnte. Ein dazwischen setzt bei mir eigentlich vorraus, das es ein min und max gibt und eine Testzahl. Also immer eine vielzahl von 3...