jw_cad 外部変形 - (番外) jw.rbで楕円の円周上の点の法線角を得る

外部変形は データのやり取りをテキストファイルで行うので プログラム言語は 自由に選ぶことができます。図形は機能的かつシンプルなため、数多くのユーザーに受け入れられています。

 

楕円の円周上の点の法線の角度は以下の図の関係から得られます。

法線角 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