外部変形は データのやり取りをテキストファイルで行うので プログラム言語は 自由に選ぶことができます。図形は機能的かつシンプルなため、数多くのユーザーに受け入れられています。
なでしこで円弧の端点に矢印を描く
/* なでしこで円弧の端点に矢印を描く
@cls & echo off
path C:\nadesiko_1_589;%path%
copy jwc_temp.txt myfiles > nul
cnako %0 > jwc_temp.txt
goto:eof
REM #jww
REM #1ci 円弧を指示してください。
REM #bz
REM #e
*/
●cipoint(ci, pm)
xとは実数; yとは実数; rとは実数; p1とは実数; p2とは実数; wとは実数; dとは実数
coとは実数; siとは実数; qとは実数; xrとは実数; yrとは実数; aとは実数
Fとは配列 = SPLIT(ci)
x = F[0]
y = F[1]
r = F[2]
p1 = F[3]
p2 = F[4]
w = F[5]
d = F[6] * PI / 180
co = COS(d)
si = SIN(d)
もし(pm = -1)なら
q = p1 * PI / 180
違えば
q = p2 * PI / 180
xr = COS(q) * r
yr = SIN(q) * r * w
aとは実数 = ATAN2(yr / w, xr * w) + d
「{x + xr * co - yr * si} {y + xr * si + yr * co},{a}」を「,」で区切る
それを戻す
●ATAN2(y, x)
もし(x = 0)なら(PI / 2 * SIGN(y))を戻す
aとは実数 = ARCTAN(y / x)
もし(x < 0)なら
もし(y < 0)なら
a = a - PI
違えば
a = a + PI
aを戻す
●SPLIT(s)
sを「 」で区切ったものを戻す
●CHOP(s)
sを空白除去して戻す
●PTDIST(pt1, pt2)
P1とは配列 = SPLIT(pt1)
P2とは配列 = SPLIT(pt2)
HYPOT(P2[0] - P1[0], P2[1] - P1[1])を戻す
●POLARTO(点, r, d)
Fとは配列 = SPLIT(点)
「{F[0] + r * COS(d)} {F[1] + r * SIN(d)}」を戻す
●ARROW(pt1, d, pm, size, xang, xan2)
lとは実数; aとは実数; cとは実数
slとは文字列; pt2とは文字列; pt3とは文字列; pt4とは文字列
l = -size * pm
a = xang * PI / 180 / 2.0
pt2 = POLARTO(pt1, l, d - a)
pt4 = POLARTO(pt1, l, d + a)
もし(xan2 = 180)なら
sl = "{pt1} {pt2} {pt4}"
違えば
c = COS(a) - SIN(a) * TAN( (90.0 - xan2 / 2.0) * PI / 180)
pt3 = POLARTO(pt1, l * c, d)
sl = "{pt1} {pt2} {pt3} {pt4}"
"sl {sl}"を表示
「myfiles」を毎行読んで反復
もし(対象を「^hq」で正規表現マッチ)ならば
「bz」を表示
続ける
もし(対象を「^hp1ci\s+(\S+ \S+)」で正規表現マッチ)ならば
pt = 抽出文字列[0]
続ける
もし(対象を「^ci\s+\S+ \S+ \S+」で正規表現マッチ)ならば
L = SPLIT(CHOP(対象))
NF = Lの配列要素数
x = L[1]
y = L[2]
r = L[3]
p1 = 0
p2 = 0
w = 1
d = 0
もし、(NF > 4)ならば、
p1 = L[4]
p2 = L[5]
w = L[6]
d = L[7]
もし(w > 1)なら
w = 1 / w
r = r / w
p1 = p1 - 90
p2 = p2 - 90
size = 5 #矢印の長さ( 図寸 )
xang = 45 #矢印の交角( ゚ )
xan2 = 120 #矢尻の交角( ゚ )
ci = "{x} {y} {r} {p1} {p2} {w} {d}"
p = cipoint(ci,-1); pt1 = p[0]; a1 =p[1]
p = cipoint(ci, 1); pt2 = p[0]; a2 =p[1]
l1 = PTDIST(pt, pt1)
l2 = PTDIST(pt, pt2)
もし(l1 <= l2)なら
pm = -1
pt = pt1
a = a1 + PI / 2
違えば
pm = 1
pt = pt2
a = a2 + PI / 2
ARROW(pt, a, pm, size, xang, xan2)