外部変形は データのやり取りをテキストファイルで行うので プログラム言語は 自由に選ぶことができます。図形は機能的かつシンプルなため、数多くのユーザーに受け入れられています。
楕円の円周上の点の法線の角度は以下の図の関係から得られます。
法線角 n は 楕円に傾きがなければ
n = atan2(yr, xr * w ** 2)
あるいは
n = atan2(yr / w, xr * w)
ただし
a は 離心角°
r は X 方向半径
w は 扁平率
xr = r * cos(a.rad)
yr = r * sin(a.rad) * w
で得られます。
スマートだと思います。経験則です。
使用例(楕円に傾きがあるときに対応)
:jw.rbで楕円の円周上の点の法線角を得る
@echo off
ruby -x %0
pause
goto:eof
#!ruby -Ks -rjw
ci = [0, 0, 0] #円データ
ci.x, ci.y = *(ptc = [100, 200]) #中心点 C
ci.r = r = 1000 #X 方向半径
ci.w = w = 0.7 #扁平率
ci.d = d = 0 #傾き°
d = d.rad #傾き rad 円の部材角で X 軸からの角度(左回り)
a = 60.rad #離心角 rad
ptr = polarto(ptc, r, a, w).rot(d, ptc) #円周上の点 R (全体系)
#ptr = cipoint(ci, :p, a.deg)
xr, yr = ptspan(ptc, ptr).rot2(d, ptc) #xr, yr (部材系)
d2 = xr == 0 && yr == 0 ? 0.0 : atan2(yr, xr * w * w)
p (d + d2).deg #法線角 X 軸からの角度(左回り)
__END__
○線 RA と RB の2等分線の角度
pf1, pf2 = ci.f #焦点 A, B
d3 = centers(ptr+pf1,ptr+pf2).deg % 180
d4 = ( (ptslope(ptr,pf1)+ptslope(ptr,pf2)).deg / 2) % 180
p [d3,d4]
○円周上の点の法線角を知りたいときは cislope を使う
d5 = cislope(ci, cipoint(ci, :p, a.deg), pm = 0).deg
p d5