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 If nextindex=0 Then LET nextindex=1
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 If p1(nextindex,y)>p2(y) Then
1190 IF p1(nextindex,y)>p2(y) THEN
1200 If isleft2(send,p2)>=0 Then !'=
1200 IF isleft2(send,p2)>=0 THEN !'=
1210 LET wn=wn+1
1210 LET wn=wn+1
1220 END IF
1220 END IF
1230 End If
1230 END IF
1240 ELSE
1240 ELSE
1250 If p1(nextindex,y)<=p2(y) Then
1250 IF p1(nextindex,y)<=p2(y) THEN
1260 If isleft2(send,p2)<=0 Then !'=
1260 IF isleft2(send,p2)<=0 THEN !'=
1270 LET wn=wn-1
1270 LET wn=wn-1
1280 End If
1280 END IF
1290 End If
1290 END IF
1300 End If
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 Select Case z
1550 SELECT CASE z
1560 Case 1
1560 CASE 1
1570 Print "squared"
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 Print "squared hole"
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 Print "(-10,5) ";Tab(12);
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 Print "(0,5) ";Tab(12);
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 Print "(10,5) ";Tab(12);
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 Print "(8,5) ";Tab(12);
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 Print "(10,10) ";Tab(12);
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 Print "strange"
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 Print "(5,8) ";Tab(12);
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 Print "(0,5) ";Tab(12);
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 Print "(10,5) ";Tab(12);
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 Print "(8,5) ";Tab(12);
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 Print "(5,8) ";Tab(12);
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 Print "(0,5) ";Tab(12);
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 Print "(8,5) ";Tab(12);
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</lang>
2820 END
</lang>


=={{header|AutoHotkey}}==
=={{header|AutoHotkey}}==