jw_cad 外部変形 - (24) 極座標による線 -

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

 

今回は 極座標による線データ について考えます。

 

外部変形の極座標による線データは コマンド "k*" と 基準点 と 相対極座標 で定義されます。

 

応用例

樹木曲線

jw_cad 外部変形 スクリプト

@rem 樹木曲線
@echo off
REM #jw
REM #0
REM #e
ruby -x %~f0 > jwc_temp.txt
goto:eof

#!ruby -Ks
def tree(i, d, r)
  if i > 0
    puts "#{d} #{r}"
    tree i-1, d-15, r*4/5
    tree i-1, d+15, r*4/5
    puts "#{d} #{-r}"
  end
end
#puts "bz"
puts "k1"
tree 10,90.0,150.0
__END__

 

階段の割り付け

jw_cad 外部変形スクリプト

@rem 階段の割り付け
@echo off
REM #jww
REM #1-%d 始点を指示してください
REM #2%d  終点を指示してください
REM #c 段数 = 
REM #e

set n=%*
for /f "tokens=1*" %%1 in (jwc_temp.txt) do (
  if %%1 == hp1- set p1=%%2
  if %%1 == hp2  set p2=%%2
)
ruby -x %0 > jwc_temp.txt
goto:eof

#!ruby -Ks
n = (ENV["n"] ? ENV["n"].to_i : 12)
x1, y1 = ENV["p1"].split.map { |x| x.to_f }
x2, y2 = ENV["p2"].split.map { |x| x.to_f }
h, w = (y2 - y1).abs, (x2 - x1).abs
a, b = h / n, w / (n > 1 ? n - 1 : 1)
d1 = Math.atan2(y1, x1) * 180 / Math::PI
r1 = Math.sqrt(x1 ** 2 + y1 ** 2)
puts "K1"
puts "#{d1} #{r1}"
n.times { puts "90 #{a}\n0 #{b}" }
__END__

 

下記の機能がある 外部変形ライブラリ jw.rb があれば

hp(1) で [x1, y1] を返す

hp(2) で [x2, y2] を返す

ptspan([x1, y1], [x2, y2]) で [w, h] を返す

hp(1).deg で 線 o-1 の角度を返す

hp(1).r で 線 o-1 の長さを返す

 

@rem 階段を割り付ける
@echo off
REM #jww
REM #1-%d 始点を指示してください
REM #2%d  終点を指示してください
REM #c 段数 = 
REM #e

set n=%*
ruby -x %0
goto:eof

#!ruby -Ks -rjw
n = (ENV["n"] ? ENV["n"].to_i : 12)
h, w = ptspan(hp(1, 2)).reverse
a, b = h / n, w / (n > 1 ? n - 1 : 1)
$stdout = files("jwc_temp.txt") # jww
puts "K1"
puts "#{d1=hp(1).deg} #{r1=hp(1).r}"
n.times { puts "90 #{a}\n0 #{b}" }
__END__

 

作業がわかりやすくなります。

 

今回で JWW_SAMPL.BAT (jw_cad 外部変形のマニュアル) にある 図形データ の考察はおわりました。

 

本稿の目的は 外部変形ライブラリ jw.rb の チェックなので 便利な図形について 引き続き考えていきます。

 

次回は 座標図 を考えます。座標図は 座標と円弧のセットです。