曲線(パス)上に文字を表示する

 投稿者:山中和義  投稿日:2009年12月 6日(日)20時58分45秒
  ●陽関数表示
!曲線上に文字を表示する

SET WINDOW -5,5,-5,5
DRAW grid

SET TEXT HEIGHT 0.5
SET TEXT JUSTIFY "CENTER","BOTTOM"
DRAW TextOnPath("Abcあい漢",1.5) WITH SHIFT(-2,-1)

END


EXTERNAL FUNCTION f(x) !曲線 y=f(x) ※陽関数表示
!LET f=ABS(x-3)
!LET f=x^3
LET f=SIN(x)
END FUNCTION


EXTERNAL PICTURE TextOnPath(s$,L) !曲線上に文字を表示する
IF LEN(s$)=0 OR L<=0 THEN EXIT PICTURE

LET k=1 !k文字目

LET S=0 !曲線y=f(x)の区間[a,b]の長さ S=∫[a,b]SQR(1+f'(x)^2)dx
LET H=0.05
LET i=0
DO
   LET t=H*i !リーマン和、区分求積

   LET Ft=f(t)
   LET df=(f(t+H)-Ft)/H !導関数 f'(x) ※微分係数による
   LET S=S+H*SQR(1+df*df)

   IF S>=(k-1)*L THEN !文字間隔ごとに
      DRAW disk WITH SCALE(0.05)*SHIFT(t,Ft) !位置を印す
      SET TEXT ANGLE ANGLE(1,df) !角度を調整する
      PLOT TEXT ,AT t,Ft: s$(k:k) !k文字目

      LET k=k+1 !次の文字へ
      IF k>LEN(s$) THEN EXIT PICTURE !すべての文字を表示したなら
   ELSE
      PLOT LINES: t,Ft; !曲線の軌跡
   END IF

   LET i=i+1
LOOP
END PICTURE


●媒介変数表示
!曲線上に文字を表示する

SET WINDOW -5,5,-5,5
DRAW grid

SET TEXT HEIGHT 0.5
SET TEXT JUSTIFY "CENTER","BOTTOM"
DRAW TextOnPath("Abcあい漢",1.5) WITH SHIFT(-2,-1)

END


EXTERNAL FUNCTION x(t) !曲線 x=f(t)、y=f(t) ※媒介変数表示
!!!LET x=t !y=sin(x)
LET x=3*COS(t) !半径3の円
END FUNCTION
EXTERNAL FUNCTION y(t)
!!!LET y=SIN(t) !y=sin(x)
LET y=3*SIN(t) !半径3の円
END FUNCTION


EXTERNAL PICTURE TextOnPath(s$,L) !曲線上に文字を表示する
IF LEN(s$)=0 OR L<=0 THEN EXIT PICTURE

LET k=1 !k文字目

LET S=0 !曲線x=f(t),y=g(t)の区間[a,b]の長さ S=∫[a,b]SQR((dx/dt)^2+(dy/dt)^2)dx
LET H=0.05
LET i=0
DO
   LET t=H*i !リーマン和、区分求積

   LET Xt=x(t)
   LET Yt=y(t)
   LET dx=(x(t+H)-Xt)/H !導関数 dx/dt、dy/dt ※微分係数による
   LET dy=(y(t+H)-Yt)/H
   LET w=dx*dx+dy*dy
   LET S=S+H*SQR(w)

   IF S>=(k-1)*L THEN !文字間隔ごとに
      DRAW disk WITH SCALE(0.05)*SHIFT(Xt,Yt) !位置を印す
      IF w<>0 THEN !角度を調整する
         SET TEXT ANGLE ANGLE(dx,dy)
      ELSE
         SET TEXT ANGLE 0
      END IF
      PLOT TEXT ,AT Xt,Yt: s$(k:k) !k文字目

      LET k=k+1 !次の文字へ
      IF k>LEN(s$) THEN EXIT PICTURE !すべての文字を表示したなら
   ELSE
      PLOT LINES: Xt,Yt; !曲線の軌跡
   END IF

   LET i=i+1
LOOP
END PICTURE


●極座標表示
!曲線上に文字を表示する

SET WINDOW -5,5,-5,5
DRAW grid

SET TEXT HEIGHT 0.5
SET TEXT JUSTIFY "CENTER","BOTTOM"
DRAW TextOnPath("Abcあい漢",3.5) WITH SHIFT(-2,-1)

END


EXTERNAL FUNCTION r(t) !曲線 r=f(θ) ※極座標表示
LET r=3*(1+COS(t))
END FUNCTION


EXTERNAL PICTURE TextOnPath(s$,L) !曲線上に文字を表示する
IF LEN(s$)=0 OR L<=0 THEN EXIT PICTURE

LET k=1 !k文字目

LET S=0 !曲線r=f(θ)の区間[a,b]の長さ S=∫[a,b]SQR(r(θ)^2+r'(θ)^2)dx
LET H=0.05
LET i=0
DO
   LET t=H*i !リーマン和、区分求積

   LET Rt=r(t)
   LET dr=(r(t+H)-Rt)/H !導関数 r'(θ) ※微分係数による
   LET w=Rt*Rt+dr*dr
   LET S=S+H*SQR(w)

   LET x=Rt*COS(t) !極座標(r,θ)→直交座標(x,y)
   LET y=Rt*SIN(t)

   IF S>=(k-1)*L THEN !文字間隔ごとに
      DRAW disk WITH SCALE(0.05)*SHIFT(x,y) !位置を印す
      IF w<>0 THEN !角度を調整する
         SET TEXT ANGLE ANGLE(dr,Rt)+t
         !SET TEXT ANGLE ANGLE(dr-Rt*TAN(t),Rt+dr*TAN(t))
      ELSE
         SET TEXT ANGLE 0
      END IF
      PLOT TEXT ,AT x,y: s$(k:k) !k文字目

      LET k=k+1 !次の文字へ
      IF k>LEN(s$) THEN EXIT PICTURE !すべての文字を表示したなら
   ELSE
      PLOT LINES: x,y; !曲線の軌跡
   END IF

   LET i=i+1
LOOP
END PICTURE
 

戻る