Ray-casting algorithm: Difference between revisions
Content added Content deleted
Line 328: | Line 328: | ||
1110 LET index=MOD(n, k) |
1110 LET index=MOD(n, k) |
||
1120 LET nextindex=MOD(n+1, k) |
1120 LET nextindex=MOD(n+1, k) |
||
1130 |
1130 IF nextindex=0 THEN LET nextindex=1 |
||
1140 LET send(1,x)=p1(index,x) |
1140 LET send(1,x)=p1(index,x) |
||
1150 LET send(2,x)=p1(nextindex,x) |
1150 LET send(2,x)=p1(nextindex,x) |
||
Line 334: | Line 334: | ||
1170 LET send(2,y)=p1(nextindex,y) |
1170 LET send(2,y)=p1(nextindex,y) |
||
1180 IF p1(index,y)<=p2(y) THEN |
1180 IF p1(index,y)<=p2(y) THEN |
||
1190 |
1190 IF p1(nextindex,y)>p2(y) THEN |
||
1200 |
1200 IF isleft2(send,p2)>=0 THEN !'= |
||
1210 LET wn=wn+1 |
1210 LET wn=wn+1 |
||
1220 END IF |
1220 END IF |
||
1230 |
1230 END IF |
||
1240 ELSE |
1240 ELSE |
||
1250 |
1250 IF p1(nextindex,y)<=p2(y) THEN |
||
1260 |
1260 IF isleft2(send,p2)<=0 THEN !'= |
||
1270 LET wn=wn-1 |
1270 LET wn=wn-1 |
||
1280 |
1280 END IF |
||
1290 |
1290 END IF |
||
1300 |
1300 END IF |
||
1310 NEXT n |
1310 NEXT n |
||
1320 LET inpolygon = wn |
1320 LET inpolygon = wn |
||
Line 370: | Line 370: | ||
1530 ! printouts |
1530 ! printouts |
||
1540 FOR z=1 TO 4 |
1540 FOR z=1 TO 4 |
||
1550 |
1550 SELECT CASE z |
||
1560 |
1560 CASE 1 |
||
1570 |
1570 PRINT "squared" |
||
1580 PRINT "(5,5) ";TAB(12); |
1580 PRINT "(5,5) ";TAB(12); |
||
1590 MAT READ type |
1590 MAT READ type |
||
Line 403: | Line 403: | ||
1860 PRINT |
1860 PRINT |
||
1870 CASE 2 |
1870 CASE 2 |
||
1880 |
1880 PRINT "squared hole" |
||
1890 PRINT "(5,5) ";TAB(12); |
1890 PRINT "(5,5) ";TAB(12); |
||
1900 MAT READ type |
1900 MAT READ type |
||
Line 412: | Line 412: | ||
1950 DATA 5,8 |
1950 DATA 5,8 |
||
1960 IF NOT inpolygon(hole,Type)<>0 AND inpolygon(square,Type)<>0 THEN PRINT "in" ELSE PRINT "out" |
1960 IF NOT inpolygon(hole,Type)<>0 AND inpolygon(square,Type)<>0 THEN PRINT "in" ELSE PRINT "out" |
||
1970 |
1970 PRINT "(-10,5) ";TAB(12); |
||
1980 MAT READ type |
1980 MAT READ type |
||
1990 DATA -10,5 |
1990 DATA -10,5 |
||
2000 IF NOT inpolygon(hole,Type)<>0 AND inpolygon(square,Type)<>0 THEN PRINT "in" ELSE PRINT "out" |
2000 IF NOT inpolygon(hole,Type)<>0 AND inpolygon(square,Type)<>0 THEN PRINT "in" ELSE PRINT "out" |
||
2010 |
2010 PRINT "(0,5) ";TAB(12); |
||
2020 MAT READ type |
2020 MAT READ type |
||
2030 DATA 0,5 |
2030 DATA 0,5 |
||
2040 IF NOT inpolygon(hole,Type)<>0 AND inpolygon(square,Type)<>0 THEN PRINT "in" ELSE PRINT "out" |
2040 IF NOT inpolygon(hole,Type)<>0 AND inpolygon(square,Type)<>0 THEN PRINT "in" ELSE PRINT "out" |
||
2050 |
2050 PRINT "(10,5) ";TAB(12); |
||
2060 MAT READ type |
2060 MAT READ type |
||
2070 DATA 10,5 |
2070 DATA 10,5 |
||
2080 IF NOT inpolygon(hole,Type)<>0 AND inpolygon(square,Type)<>0 THEN PRINT "in" ELSE PRINT "out" |
2080 IF NOT inpolygon(hole,Type)<>0 AND inpolygon(square,Type)<>0 THEN PRINT "in" ELSE PRINT "out" |
||
2090 |
2090 PRINT "(8,5) ";TAB(12); |
||
2100 MAT READ type |
2100 MAT READ type |
||
2110 DATA 8,5 |
2110 DATA 8,5 |
||
2120 IF NOT inpolygon(hole,Type)<>0 AND inpolygon(square,Type)<>0 THEN PRINT "in" ELSE PRINT "out" |
2120 IF NOT inpolygon(hole,Type)<>0 AND inpolygon(square,Type)<>0 THEN PRINT "in" ELSE PRINT "out" |
||
2130 |
2130 PRINT "(10,10) ";TAB(12); |
||
2140 MAT READ type |
2140 MAT READ type |
||
2150 DATA 10,10 |
2150 DATA 10,10 |
||
Line 434: | Line 434: | ||
2170 PRINT |
2170 PRINT |
||
2180 CASE 3 |
2180 CASE 3 |
||
2190 |
2190 PRINT "strange" |
||
2200 PRINT "(5,5) ";TAB(12); |
2200 PRINT "(5,5) ";TAB(12); |
||
2210 MAT READ type |
2210 MAT READ type |
||
2220 DATA 5,5 |
2220 DATA 5,5 |
||
2230 IF inpolygon(strange,Type)<>0 THEN PRINT "in" ELSE PRINT "out" |
2230 IF inpolygon(strange,Type)<>0 THEN PRINT "in" ELSE PRINT "out" |
||
2240 |
2240 PRINT "(5,8) ";TAB(12); |
||
2250 MAT READ type |
2250 MAT READ type |
||
2260 DATA 5,8 |
2260 DATA 5,8 |
||
Line 447: | Line 447: | ||
2300 DATA -10,5 |
2300 DATA -10,5 |
||
2310 IF inpolygon(strange,Type)<>0 THEN PRINT "in" ELSE PRINT "out" |
2310 IF inpolygon(strange,Type)<>0 THEN PRINT "in" ELSE PRINT "out" |
||
2320 |
2320 PRINT "(0,5) ";TAB(12); |
||
2330 MAT READ type |
2330 MAT READ type |
||
2340 DATA 0,5 |
2340 DATA 0,5 |
||
2350 IF inpolygon(strange,Type)<>0 THEN PRINT "in" ELSE PRINT "out" |
2350 IF inpolygon(strange,Type)<>0 THEN PRINT "in" ELSE PRINT "out" |
||
2360 |
2360 PRINT "(10,5) ";TAB(12); |
||
2370 MAT READ type |
2370 MAT READ type |
||
2380 DATA 10,5 |
2380 DATA 10,5 |
||
2390 IF inpolygon(strange,Type)<>0 THEN PRINT "in" ELSE PRINT "out" |
2390 IF inpolygon(strange,Type)<>0 THEN PRINT "in" ELSE PRINT "out" |
||
2400 |
2400 PRINT "(8,5) ";TAB(12); |
||
2410 MAT READ type |
2410 MAT READ type |
||
2420 DATA 8,5 |
2420 DATA 8,5 |
||
Line 470: | Line 470: | ||
2530 DATA 5,5 |
2530 DATA 5,5 |
||
2540 IF inpolygon(exagon,Type)<>0 THEN PRINT "in" ELSE PRINT "out" |
2540 IF inpolygon(exagon,Type)<>0 THEN PRINT "in" ELSE PRINT "out" |
||
2550 |
2550 PRINT "(5,8) ";TAB(12); |
||
2560 MAT READ type |
2560 MAT READ type |
||
2570 DATA 5,8 |
2570 DATA 5,8 |
||
Line 478: | Line 478: | ||
2610 DATA -10,5 |
2610 DATA -10,5 |
||
2620 IF inpolygon(exagon,Type)<>0 THEN PRINT "in" ELSE PRINT "out" |
2620 IF inpolygon(exagon,Type)<>0 THEN PRINT "in" ELSE PRINT "out" |
||
2630 |
2630 PRINT "(0,5) ";TAB(12); |
||
2640 MAT READ type |
2640 MAT READ type |
||
2650 DATA 0,5 |
2650 DATA 0,5 |
||
Line 486: | Line 486: | ||
2690 DATA 10,5 |
2690 DATA 10,5 |
||
2700 IF inpolygon(exagon,Type)<>0 THEN PRINT "in" ELSE PRINT "out" |
2700 IF inpolygon(exagon,Type)<>0 THEN PRINT "in" ELSE PRINT "out" |
||
2710 |
2710 PRINT "(8,5) ";TAB(12); |
||
2720 MAT READ type |
2720 MAT READ type |
||
2730 DATA 8,5 |
2730 DATA 8,5 |
||
Line 497: | Line 497: | ||
2800 END SELECT |
2800 END SELECT |
||
2810 NEXT z |
2810 NEXT z |
||
2820 END |
2820 END |
||
</lang> |
|||
=={{header|AutoHotkey}}== |
=={{header|AutoHotkey}}== |