Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
54
Task/Draw-a-sphere/ERRE/draw-a-sphere.erre
Normal file
54
Task/Draw-a-sphere/ERRE/draw-a-sphere.erre
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
PROGRAM SPHERE
|
||||
|
||||
CONST SHADES$=".:!*oe&#%@"
|
||||
|
||||
DIM LIGHT[2],X[2],Y[2],V[2],VEC[2]
|
||||
|
||||
PROCEDURE DOT(X[],Y[]->D)
|
||||
D=X[0]*Y[0]+X[1]*Y[1]+X[2]*Y[2]
|
||||
IF D<0 THEN D=-D ELSE D=0 END IF
|
||||
END PROCEDURE
|
||||
|
||||
PROCEDURE NORMALIZE(V[]->V[])
|
||||
LUNG=SQR(V[0]*V[0]+V[1]*V[1]+V[2]*V[2])
|
||||
V[0]=V[0]/LUNG
|
||||
V[1]=V[1]/LUNG
|
||||
V[2]=V[2]/LUNG
|
||||
END PROCEDURE
|
||||
|
||||
PROCEDURE PDRAW(R,K,AMBIENT)
|
||||
FOR I=INT(-R) TO INT(R) DO
|
||||
X=I+0.5
|
||||
FOR J=INT(-2*R) TO INT(2*R) DO
|
||||
Y=J/2+0.5
|
||||
IF (X*X+Y*Y<=R*R) THEN
|
||||
VEC[0]=X
|
||||
VEC[1]=Y
|
||||
VEC[2]=SQR(R*R-X*X-Y*Y)
|
||||
NORMALIZE(VEC[]->VEC[])
|
||||
DOT(LIGHT[],VEC[]->D)
|
||||
B=D^K+AMBIENT
|
||||
INTENSITY%=(1-B)*(LEN(SHADES$)-1)
|
||||
IF (INTENSITY%<0) THEN INTENSITY%=0 END IF
|
||||
IF (INTENSITY%>=LEN(SHADES$)-1) THEN
|
||||
INTENSITY%=LEN(SHADES$)-2
|
||||
END IF
|
||||
PRINT(#1,MID$(SHADES$,INTENSITY%+1,1);)
|
||||
ELSE
|
||||
PRINT(#1,(" ");)
|
||||
END IF
|
||||
END FOR
|
||||
PRINT(#1,)
|
||||
END FOR
|
||||
END PROCEDURE
|
||||
|
||||
BEGIN
|
||||
LIGHT[]=(30,30,-50)
|
||||
OPEN("O",1,"SPHERE.PRN")
|
||||
NORMALIZE(LIGHT[]->LIGHT[])
|
||||
PDRAW(10,2,0.4)
|
||||
|
||||
PRINT(#1,STRING$(79,"="))
|
||||
PDRAW(20,4,0.1)
|
||||
CLOSE(1)
|
||||
END PROGRAM
|
||||
Loading…
Add table
Add a link
Reference in a new issue