diff options
-rw-r--r-- | htdp.f | 49 |
1 files changed, 32 insertions, 17 deletions
@@ -334,8 +334,9 @@ C C FIND STARTING POINT WHERE X(I).NE.X0 IP=0 10 IP=IP+1 - IF(X(IP)-X0) 15,12,16 - 12 IF(IP.LE.N) GO TO 10 + IF (X(IP) .lt. X0) goto 15 + if (X(IP) .gt. X0) goto 16 + IF(IP.LE.N) GO TO 10 WRITE(LUOUT,6001) 6001 FORMAT('0 POLYGON INPUT ERROR - ALL POINTS ON LINE X = X0') STOP @@ -352,30 +353,44 @@ C DO 100 II=IP1,IPN I=II IF(I.GT.N) I=I-N - IF(IL) 30,50,40 - 30 IF(X(I)-X0) 90,32,34 - 32 IS=-1 + if (IL .eq. 0) goto 50 + if (IL .gt. 0) goto 40 + IF (X(I) .lt. X0) goto 90 + if (X(I) .gt. X0) goto 34 + IS=-1 GO TO 60 34 IL=1 GO TO 80 - 40 IF(X(I)-X0) 42,44,90 - 42 IL=-1 + 40 IF(X(I) .eq. X0) goto 44 + if(X(I) .gt. X0) goto 90 + IL=-1 GO TO 80 44 IS=1 GO TO 60 - 50 IF(X(I)-X0) 52,55,54 - 52 IL=-1 - IF(IS) 90,140,80 + 50 IF(X(I) .eq. X0) goto 55 + if(X(I) .gt. X0) goto 54 + IL=-1 + IF (IS .lt. 0) goto 90 + if (IS .eq. 0) goto 140 + goto 80 54 IL=1 - IF(IS) 80,140,90 - 55 IF(Y(I)-Y0) 57,120,58 - 57 IF(YL-Y0) 90,120,120 - 58 IF(YL-Y0) 120,120,90 + IF(IS .lt. 0) goto 80 + if(IS .eq. 0) goto 140 + goto 90 + 55 IF(Y(I) .eq. Y0) goto 120 + if(Y(I) .gt. Y0) goto 58 + IF(YL .ge. Y0) goto 120 + goto 90 + 58 IF(YL .le. Y0) goto 120 + goto 90 C 60 IL=0 - IF(Y(I)-Y0) 90,120,90 - 80 IF(YL-Y0+(Y(I)-YL)*(X0-XL)/(X(I)-XL)) 90,120,85 - 85 NPC=NPC+1 + IF (Y(I) .eq. Y0) goto 120 + goto 90 + 80 tmp = YL-Y0+(Y(I)-YL)*(X0-XL)/(X(I)-XL) + IF (tmp .lt. 0) goto 90 + if (tmp .eq. 0) goto 120 + NPC=NPC+1 90 XL=X(I) YL=Y(I) 100 CONTINUE |