日常に潜む問題

 投稿者:SECOND  投稿日:2012年 6月13日(水)00時46分40秒
  !日常に潜む問題。

!加法・減法混色の、色見本を作るとき、
!半径1の原色円3個、互いの距離を、2重部分が最大面積になるようにしたい。
!
SET WINDOW 0,6,0,3
!
FOR mr=0 TO 2 STEP .01                   !半径1の円3個、中心間距離は、mr
   LET w=calc(mr)
   PRINT USING "mr=#.## 2重部面積=#.##### 3重部面積=#.#####": mr,w,s33
   IF bak< w THEN
      LET bak=w
      LET bak3=s33
      LET peak=mr
   END IF
   CALL disp3
   DO
      WAIT DELAY 0
      mouse poll mx,my,mlb,mrb
      IF mrb=1 THEN STOP
      IF s33<=1e-4 THEN EXIT FOR
   LOOP UNTIL mlb=0
NEXT mr
PRINT "3重部 消失 停止。"
PRINT "2重部 最大値"
LET mr=peak
PRINT USING "mr=#.## 2重部面積=#.##### 3重部面積=#.#####": mr,bak,bak3
CALL disp3

FUNCTION calc(mr)
   LET s1= PI                   !円1個、面積
   LET a2= ACOS(mr/2)           !円2個、重なる範囲の扇形、頂角の半角
   LET s2= a2/PI*s1             !円2個、重なる範囲の扇形、面積
   LET s22= 2*s2-mr*SIN(a2)     !円2個、2重範囲の面積
   LET s3= (a2+PI/6)/PI*s1               !円3個、重なる範囲の扇形、1個の面積
   LET s6= mr^2*SQR(3)/4+3*mr*SIN(a2)/2  !円中心3個と外側交点3個での6角形面積
   LET s33=3*s22-(3*s3-s6)               !円3個、3重範囲の面積
   LET calc=3*(s22-s33)         !円3個、2重範囲3個の面積
END FUNCTION

SUB disp3
   SET DRAW mode hidden
   !-----加法混色
   SET VIEWPORT 0,1,0/2,1/2              !下側半分
   CALL BG_color(1)                      !黒地
   !---
   SET DRAW MODE MERGE                   !加法混色
   CALL ctest
   !-----減法混色
   SET VIEWPORT 0,1,1/2,2/2              !上側半分
   CALL BG_color(0)                      !白地
   !---
   SET DRAW MODE MASK                    !減法混色
   CALL ctest
   SET DRAW mode explicit
END SUB

SUB BG_color(c)
   SET DRAW MODE OVERWRITE
   SET AREA COLOR c
   PLOT AREA:0,0; 6,0; 6,3; 0,3
END SUB

SUB ctest
   SET AREA COLOR 2                          !blue    B
   DRAW disk WITH SHIFT(1,1)
   SET AREA COLOR 3                          !green   G
   DRAW disk WITH SHIFT(1+mr,1)
   SET AREA COLOR 4                          !red     R
   DRAW disk WITH SHIFT(1+mr/2,1+mr*SQR(3)/2)
   !---
   SET AREA COLOR 5                          !cyan    W-R
   DRAW disk WITH SHIFT(4,1)
   SET AREA COLOR 6                          !yellow  W-B
   DRAW disk WITH SHIFT(4+mr,1)
   SET AREA COLOR 7                          !magenta W-G
   DRAW disk WITH SHIFT(4+mr/2,1+mr*SQR(3)/2)
END SUB

END
 

戻る