Add tasks for all the new languages
This commit is contained in:
parent
9dc3c2bb62
commit
bba7bfd280
13208 changed files with 134745 additions and 0 deletions
|
|
@ -0,0 +1,127 @@
|
|||
' version 21-06-2015
|
||||
' compile with: fbc -s console or fbc -s gui
|
||||
' Xiaolin Wu’s line-drawing algorithm
|
||||
'shared var and macro's
|
||||
|
||||
Dim Shared As UInteger wu_color
|
||||
|
||||
#Macro ipart(x)
|
||||
Int(x) ' integer part
|
||||
#EndMacro
|
||||
|
||||
#Macro round(x)
|
||||
Int((x) + .5) ' round off
|
||||
#EndMacro
|
||||
|
||||
#Macro fpart(x)
|
||||
Frac(x) ' fractional part
|
||||
#EndMacro
|
||||
|
||||
#Macro rfpart(x)
|
||||
' 1 - Frac(x) ' seems to give problems for very small x
|
||||
IIf(1 - Frac(x) >= 1, 1, 1 - Frac(x))
|
||||
#EndMacro
|
||||
|
||||
#Macro plot(x, y , c)
|
||||
' use the alpha channel to set the amount of color
|
||||
PSet(x,y), wu_color Or (Int(c * 255)) Shl 24
|
||||
#EndMacro
|
||||
|
||||
Sub drawline(x0 As Single, y0 As Single, x1 As Single, y1 As Single,_
|
||||
col As UInteger = RGB(255,255,255))
|
||||
|
||||
wu_color = col And &HFFFFFF ' strip off the alpha channel information
|
||||
|
||||
Dim As Single gradient
|
||||
Dim As Single xend, yend, xgap, intery
|
||||
Dim As UInteger xpxl1, ypxl1, xpxl2, ypxl2, x
|
||||
Dim As Integer steep = Abs(y1 - y0) > Abs(x1 - x0) ' boolean
|
||||
|
||||
If steep Then
|
||||
Swap x0, y0
|
||||
Swap x1, y1
|
||||
End If
|
||||
|
||||
If x0 > x1 Then
|
||||
Swap x0, x1
|
||||
Swap y0, y1
|
||||
End If
|
||||
|
||||
gradient = (y1 - y0) / (x1 - x0)
|
||||
|
||||
' first endpoint
|
||||
' xend = round(x0)
|
||||
xend = ipart(x0)
|
||||
yend = y0 + gradient * (xend - x0)
|
||||
xgap = rfpart(x0 + .5)
|
||||
xpxl1 = xend ' this will be used in the main loop
|
||||
ypxl1 = ipart(yend)
|
||||
If steep Then
|
||||
plot(ypxl1, xpxl1, rfpart(yend) * xgap)
|
||||
plot(ypxl1+1, xpxl1, fpart(yend) * xgap)
|
||||
Else
|
||||
plot(xpxl1, ypxl1, rfpart(yend) * xgap)
|
||||
plot(xpxl1, ypxl1+1, fpart(yend) * xgap)
|
||||
End If
|
||||
intery = yend + gradient ' first y-intersecction for the main loop
|
||||
|
||||
' handle second endpoint
|
||||
' xend = round(x1)
|
||||
xend = ipart(x1)
|
||||
yend = y1 + gradient * (xend - x1)
|
||||
xgap = fpart(x1 + .5)
|
||||
xpxl2 = xend ' this will be used in the main loop
|
||||
ypxl2 = ipart(yend)
|
||||
If steep Then
|
||||
plot(ypxl2, xpxl2, rfpart(yend) * xgap)
|
||||
plot(ypxl2+1, xpxl2, fpart(yend) * xgap)
|
||||
Else
|
||||
plot(xpxl2, ypxl2, rfpart(yend) * xgap)
|
||||
plot(xpxl2, ypxl2+1, fpart(yend) * xgap)
|
||||
End If
|
||||
|
||||
' main loop
|
||||
If steep Then
|
||||
For x = xpxl1 + 1 To xpxl2 - 1
|
||||
plot(ipart(intery), x, rfpart(intery))
|
||||
plot(ipart(intery)+1, x, fpart(intery))
|
||||
intery = intery + gradient
|
||||
Next
|
||||
Else
|
||||
For x = xpxl1 + 1 To xpxl2 - 1
|
||||
plot(x, ipart(intery), rfpart(intery))
|
||||
plot(x, ipart(intery)+1, fpart(intery))
|
||||
intery = intery + gradient
|
||||
Next
|
||||
End If
|
||||
|
||||
End Sub
|
||||
|
||||
' ------=< MAIN >=------
|
||||
|
||||
#Define W_ 600
|
||||
#Define H_ 600
|
||||
|
||||
#Include Once "fbgfx.bi" ' needed setting the screen attributes
|
||||
Dim As Integer i
|
||||
Dim As String fname = __FILE__
|
||||
|
||||
ScreenRes W_, H_, 32,, FB.GFX_ALPHA_PRIMITIVES
|
||||
|
||||
Randomize Timer
|
||||
|
||||
For i = 0 To H_ Step H_\30
|
||||
drawline(0, 0, W_, i, Int(Rnd * &HFFFFFF))
|
||||
Next
|
||||
|
||||
For i = 0 To W_ Step W_\30
|
||||
drawline(0, 0, i, H_, Int(Rnd * &HFFFFFF))
|
||||
Next
|
||||
|
||||
i = InStr(fname,".bas")
|
||||
fname = Left(fname, Len(fname)-i+1)
|
||||
WindowTitle fname + " hit any key to end program"
|
||||
|
||||
While Inkey <> "" : Wend
|
||||
Sleep
|
||||
End
|
||||
Loading…
Add table
Add a link
Reference in a new issue