Code: Select all
10 M=20:DIMX(M),Y(M),Z(M):GOTO41
11 :
12 X0=X(0)
13 X1=X(0)
14 FORI=1TON
15 IFX0>X(I)THENX0=X(I)
16 IFX1<X(I)THENX1=X(I)
17 NEXT
18 X0=-INT(-X0):IFX0<0THENX0=0
19 X1=INT(X1):IFX1>159THENX1=159
20 IFX0>X1THENRETURN
21 FORX=X0TOX1
22 K=0
23 J=N
24 FORI=0TON
25 IFX(I)=X(J)ORNOT(X(I)<=XANDX<X(J)ORX(J)<=XANDX<X(I))THEN27
26 Z(K)=(Y(I)*(X-X(J))+Y(J)*(X(I)-X))/(X(I)-X(J)):K=K+1
27 J=I
28 NEXT
29 IFK<2THEN38
30 FORI=1TOK-1:Z=Z(I)
31 FORJ=I-1TO0STEP-1:IFZ(J)>ZTHENZ(J+1)=Z(J):NEXT
32 Z(J+1)=Z:NEXTI
33 FORI=0TOK-2STEP2
34 Y0=-INT(-Z(I)):IFY0<0THENY0=0
35 Y1=INT(Z(I+1)):IFY1>191THENY1=191
36 IFY0<=Y1THEN:@1,X,Y0TOX,Y1
37 NEXT
38 NEXT
39 RETURN
40 :
41 @ON:@CLR
42 READN:IFN=-1THEN45
43 FORI=0TON:READX,Y:X(I)=X/5+.5:Y(I)=Y/3+.5:NEXT
44 GOSUB12:GOTO42
45 FORP=-1TO0:GETA$:P=A$="":NEXT
46 @RETURN:END
47 :
48 DATA 12, 76,235,125,44,151,47,191,143,231,39,259,36,299,233,258,239,243,92,210,175
49 DATA 171,178,143,90,117,242, 3, 326,35,370,28,379,233,343,232, 9, 432,25,473,26,550
50 DATA 211,568,30,606,34,579,244,529,239,463,68,459,234,424,231, 3, 659,42,701,48,667
51 DATA 259,629,252, 20, 40,315,93,315,124,347,109,364,83,338,41,344,24,420,36,495,74
52 DATA 503,93,454,55,454,53,433,122,434,127,527,107,528,106,472,92,513,71,530,35,530,5
53 DATA 486,8,349, 18, 148,308,173,332,206,330,221,343,223,379,205,393,174,393,173,332
54 DATA 148,308,219,306,244,331,247,391,217,416,189,416,239,515,215,518,174,443,179,519
55 DATA 153,521, 12, 334,299,341,352,352,411,321,409,341,352,334,299,360,300,402,523
56 DATA 372,523,356,436,312,433,284,517,254,515, 9, 433,302,562,310,561,339,472,333,469
57 DATA 393,527,396,525,428,467,423,463,525,425,523, 3, 585,311,621,315,607,531,571,528
58 DATA 12, 647,319,679,321,672,411,757,328,786,329,784,357,692,434,776,519,773,548,746
59 DATA 545,667,451,661,539,631,535, -1
60 :
61 REM ** MG POLYGON FILL WRITTEN 2021-11-03 BY MICHAEL KIRCHER
As this code has all to do the line clipping and sorting, etc., it runs much slower than the demo I published earlier, with those
(with 'even-odd' fill rule).