Basic Univers
Procedure SPH_Triangle(x1, y1, x2, y2, x3, y3, couleur1, couleur2, couleur3, alpha.f, mode, lum, trou, deplacement)
rec = 0
If y1 = y2 : y1 + 1 : rec = 1: EndIf
If y1 = y3 : y1 + 1 : rec = 1: EndIf
If y2 = y3 : y2 + 1 : rec = 2: EndIf
haut = y1
xx.f = x1
xy.f = y1
xdeb.f = x2
ydeb.f = y2
xfin.f = x3
yfin.f = y3
plat = 0
If x1 = x2 And y1 = y2
plat = 1
EndIf
If x1 = x3 And y1 = y3
plat = 1
EndIf
If x2 = x3 And y2 = y3
plat = 1
EndIf
If x1 = x2 And x2 = x3
plat = 1
EndIf
If y1 = y2 And y2 = y3
plat = 1
EndIf
If plat = 1 : ProcedureReturn 0 : EndIf
If y2EndIf
If y3EndIf
If xdeb>xfin
u = xdeb : xdeb = xfin : xfin = u
u = ydeb : ydeb = yfin : yfin = u
EndIf
bas = y1
If y2>bas : bas = y2 : EndIf
If y3>bas : bas = y3 : EndIf
deca.f = 0
decb.f = 0
decc.f = 0
u = ydeb - haut : If u = 0 : u = 1 : EndIf
dec1.f =(xx - xdeb)/u
u = yfin - haut : If u = 0 : u = 1 : EndIf
dec2.f =(xfin - xx)/u
u = yfin - ydeb : If u = 0 : dec3.f = 0 : milieuy = bas + 1
Else : dec3.f =(xfin - xdeb)/u
milieuy = ydeb : xx01 = 1
If milieuy > yfin : milieuy = yfin : xx01 = 2 : EndIf
EndIf
Dim rvb(8)
rvb(0)= Red(couleur1)
rvb(1)= Red(couleur2)
rvb(2)= Red(couleur3)
rvb(3)= Green(couleur1)
rvb(4)= Green(couleur2)
rvb(5)= Green(couleur3)
rvb(6)= Blue(couleur1)
rvb(7)= Blue(couleur2)
rvb(8)= Blue(couleur3)
If rec = 1 : y1 - 1 : EndIf
If rec = 2 : y2 - 1 : EndIf
dist12.f = Sqr((x2 - x1)*(x2 - x1)+(y2 - y1)*(y2 - y1))
dist23.f = Sqr((x3 - x2)*(x3 - x2)+(y3 - y2)*(y3 - y2))
dist13.f = Sqr((x3 - x1)*(x3 - x1)+(y3 - y1)*(y3 - y1))
For u = haut To bas
If decb + deca>0
For n = xx - deca To xx + decb
dist1.f = Sqr((n - x1)*(n - x1)+(u - y1)*(u - y1))
dist2.f = Sqr((n - x2)*(n - x2)+(u - y2)*(u - y2))
dist3.f = Sqr((n - x3)*(n - x3)+(u - y3)*(u - y3))
If mode = 0
distM1.f = dist12.f/1.3
If distM1.f>dist13.f/1.3 : distM1.f = dist13.f/1.3 : EndIf
distM2.f = dist12.f/1.3
If distM2.f>dist23.f/1.3 : distM2.f = dist23.f/1.3 : EndIf
distM3.f = dist13.f/1.3
If distM3.f>dist23.f/1.3 : distM3.f = dist23.f/1.3 : EndIf
EndIf
If mode = 1
distM1.f = dist12.f
If distM1.f>dist13.f : distM1.f = dist13.f : EndIf
distM2.f = dist12.f
If distM2.f>dist23.f : distM2.f = dist23.f : EndIf
distM3.f = dist13.f
If distM3.f>dist23.f : distM3.f = dist23.f : EndIf
EndIf
If mode = 2
distM1.f =(dist12.f + dist13.f)/2
distM2.f =(dist12.f + dist23.f)/2
distM3.f =(dist13.f + dist23.f)/2
EndIf
If mode = 3
distM1.f = dist12.f
If distM1.fEndIf
distM2.f = dist12.f
If distM2.fEndIf
distM3.f = dist13.f
If distM3.fEndIf
EndIf
If mode = 4
distM1.f = dist12.f*1.3
If distM1.fEndIf
distM2.f = dist12.f*1.3
If distM2.fEndIf
distM3.f = dist13.f*1.3
If distM3.fEndIf
EndIf
r1.f = lum -((dist1/(distM1))*100)
r2.f = lum -((dist2/(distM2))*100)
r3.f = lum -((dist3/(distM3))*100)
v1.f = lum -((dist1/(distM1))*100)
v2.f = lum -((dist2/(distM2))*100)
v3.f = lum -((dist3/(distM3))*100)
b1.f = lum -((dist1/(distM1))*100)
b2.f = lum -((dist2/(distM2))*100)
b3.f = lum -((dist3/(distM3))*100)
rr4.f =(rvb(0)*r1/100)+(rvb(1)*r2/100)+(rvb(2)*r3/100)
vv4.f =(rvb(3)*v1/100)+(rvb(4)*v2/100)+(rvb(5)*v3/100)
bb4.f =(rvb(6)*b1/100)+(rvb(7)*b2/100)+(rvb(8)*b3/100)
If alpha<100
c = Point(n, u)
If c<0
Else
rr4 = rr4*alpha/100
vv4 = vv4*alpha/100
bb4 = bb4*alpha/100
rr5.f = Red(c)
vv5.f = Green(c)
bb5.f = Blue(c)
rr4 + rr5
vv4 + vv5
bb4 + bb5
EndIf
EndIf
If rr4>255 : rr4 = 255 : EndIf
If vv4>255 : vv4 = 255 : EndIf
If bb4>255 : bb4 = 255 : EndIf
If rr4<0 : rr4 = 0 : EndIf
If vv4<0 : vv4 = 0 : EndIf
If bb4<0 : bb4 = 0 : EndIf
If trou = 0 And deplacement = 0
Plot(n, u, RGB(rr4, vv4, bb4))
Else
If Random(trou) = 0
If deplacement = 0
Plot(n, u, RGB(rr4, vv4, bb4))
Else
Plot(n + Random(deplacement*2)- deplacement, u + Random(deplacement*2)- deplacement, RGB(rr4, vv4, bb4))
EndIf
EndIf
EndIf
Next
Else
For n = xx - deca To xx + decb Step - 1
dist1.f = Sqr((n - x1)*(n - x1)+(u - y1)*(u - y1))
dist2.f = Sqr((n - x2)*(n - x2)+(u - y2)*(u - y2))
dist3.f = Sqr((n - x3)*(n - x3)+(u - y3)*(u - y3))
If mode = 0
distM1.f = dist12.f/1.3
If distM1.f>dist13.f/1.3 : distM1.f = dist13.f/1.3 : EndIf
distM2.f = dist12.f/1.3
If distM2.f>dist23.f/1.3 : distM2.f = dist23.f/1.3 : EndIf
distM3.f = dist13.f/1.3
If distM3.f>dist23.f/1.3 : distM3.f = dist23.f/1.3 : EndIf
EndIf
If mode = 1
distM1.f = dist12.f
If distM1.f>dist13.f : distM1.f = dist13.f : EndIf
distM2.f = dist12.f
If distM2.f>dist23.f : distM2.f = dist23.f : EndIf
distM3.f = dist13.f
If distM3.f>dist23.f : distM3.f = dist23.f : EndIf
EndIf
If mode = 2
distM1.f =(dist12.f + dist13.f)/2
distM2.f =(dist12.f + dist23.f)/2
distM3.f =(dist13.f + dist23.f)/2
EndIf
If mode = 3
distM1.f = dist12.f
If distM1.fEndIf
distM2.f = dist12.f
If distM2.fEndIf
distM3.f = dist13.f
If distM3.fEndIf
EndIf
If mode = 4
distM1.f = dist12.f*1.3
If distM1.fEndIf
distM2.f = dist12.f*1.3
If distM2.fEndIf
distM3.f = dist13.f*1.3
If distM3.fEndIf
EndIf
r1.f = lum -((dist1/(distM1))*100)
r2.f = lum -((dist2/(distM2))*100)
r3.f = lum -((dist3/(distM3))*100)
v1.f = lum -((dist1/(distM1))*100)
v2.f = lum -((dist2/(distM2))*100)
v3.f = lum -((dist3/(distM3))*100)
b1.f = lum -((dist1/(distM1))*100)
b2.f = lum -((dist2/(distM2))*100)
b3.f = lum -((dist3/(distM3))*100)
rr4.f =(rvb(0)*r1/100)+(rvb(1)*r2/100)+(rvb(2)*r3/100)
vv4.f =(rvb(3)*v1/100)+(rvb(4)*v2/100)+(rvb(5)*v3/100)
bb4.f =(rvb(6)*b1/100)+(rvb(7)*b2/100)+(rvb(8)*b3/100)
If alpha<100
c = Point(n, u)
If c<0
Else
rr4 = rr4*alpha/100
vv4 = vv4*alpha/100
bb4 = bb4*alpha/100
rr5.f = Red(c)
vv5.f = Green(c)
bb5.f = Blue(c)
rr4 + rr5
vv4 + vv5
bb4 + bb5
EndIf
EndIf
If rr4>255 : rr4 = 255 : EndIf
If vv4>255 : vv4 = 255 : EndIf
If bb4>255 : bb4 = 255 : EndIf
If rr4<0 : rr4 = 0 : EndIf
If vv4<0 : vv4 = 0 : EndIf
If bb4<0 : bb4 = 0 : EndIf
If trou = 0 And deplacement = 0
Plot(n, u, RGB(rr4, vv4, bb4))
Else
If Random(trou) = 0
If deplacement = 0
Plot(n, u, RGB(rr4, vv4, bb4))
Else
Plot(n + Random(deplacement*2)- deplacement, u + Random(deplacement*2)- deplacement, RGB(rr4, vv4, bb4))
EndIf
EndIf
EndIf
Next
EndIf
If u < milieuy
deca + dec1
decb + dec2
EndIf
If u > milieuy
If xx01 = 1
deca - dec3
decb + dec2
Else
deca + dec1
decb + dec3
EndIf
EndIf
Next
EndProcedure
OpenWindow(1, 0, 0, 1024, 768, "", #PB_Window_MinimizeGadget)
If StartDrawing(WindowOutput(1))
StopDrawing()
EndIf
For plusieur = 1 To 10
lumiere = 100
alpha = 100
mode = 2
trou = 0
deplacement = 0
x1 = Random(992) + 30
y1 = Random(733) + 30
x2 = Random(992) + 30
y2 = Random(733) + 30
x3 = Random(992) + 30
y3 = Random(733) + 30
c1 = RGB(Random(255), Random(255), Random(255))
c2 = RGB(Random(255), Random(255), Random(255))
c3 = RGB(Random(255), Random(255), Random(255))
If StartDrawing(WindowOutput(1))
SPH_Triangle(x1, y1, x2, y2, x3, y3, c1, c2, c3, alpha, mode, lumiere, trou, deplacement)
StopDrawing()
EndIf
Next
Repeat : event = WindowEvent() : Until event =#PB_Event_CloseWindow