jw_cad 外部変形 - (806) rubyで線に直交線を引く -

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

 

rubyで線に直交線を引く

:rubyで線に直交線を引く
@echo off
ruby -x %0 jwc_temp.txt
goto:eof

REM #jww
REM #1ln 線を指示してください
REM #bz
REM #e

#!ruby -Ks -an -i.bak
def lnlength(ln) #線長を返す
  x1, y1, x2, y2 = ln
  return hypot(x2 - x1, y2 - y1)
end
def lnslope(ln) #線の角度を返す
  x1, y1, x2, y2 = ln
  return atan2(y2 - y1, x2 - x1)
end
BEGIN { include Math }
case $_
  when /^hq/
    puts "bz"
  when /^hp1ln/
    p0 = $F[1, 2].map{|x| x.to_f}
  when /^[ ]/
    if $F.size == 4
      ln = $F.map{|x| x.to_f}
      x1, y1, x2, y2 = ln
      p1 = [x1, y1]
      p2 = [x2, y2]
      pc = [(x1 + x2) / 2, (y1 + y2) / 2]
      l1 = lnlength(p0 + p1)
      l2 = lnlength(p0 + p2)
      l3 = lnlength(p0 + pc)
      pc = p1 if l2 > l1 && l3 > l1
      pc = p2 if l1 > l2 && l3 > l2
      l = lnlength(ln) / 2
      d = lnslope(ln)
      co = cos(d) * l
      si = sin(d) * l
      xc, yc = pc
      puts "%s %s %s %s" % [xc + si, yc - co, xc - si, yc + co]
    end
end
__END__