○手摺本体側の展開図作図用
前回のスクリプト共々、2008年に作っていたものです。
入力部分のデフォルト値のみ変更しました。
@REM 円筒がY接続された主円筒の展開図
@echo off
REM #jww
REM #cd
REM #c主円筒の直径 無指定:38.0/_/a
REM #c円筒の長さ 無指定:1000.0/_/b
REM #c穴の直径 無指定:32.0/_/c
REM #c円の分割角度 無指定:10/_/d
REM #c円筒の接続角度 無指定:60/_/e
REM #0
REM #e
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt %1 %2 %3 %4 %5 > jwc_temp.txt
goto end
#!ruby -Ks
include Math
def sen_sen_kouten2(sen1,sen2)
sen1x=sen1[2]-sen1[0]
sen1y=sen1[3]-sen1[1]
sen1xy=sqrt(sen1x**2+sen1y**2)
sen1_arg=atan2(sen1y,sen1x)
x1_1=sen1[0]
x1_2=sen1[0]+sen1xy
y1_1=sen1[1]
y1_2=sen1[1]
x=sen2[0]-sen1[0]
y=sen2[1]-sen1[1]
xy=sqrt(x**2+y**2)
arg=atan2(y,x)
henkaku=arg-sen1_arg
x2_1=sen1[0]+xy*cos(henkaku)
y2_1=sen1[1]+xy*sin(henkaku)
x=sen2[2]-sen1[0]
y=sen2[3]-sen1[1]
xy=sqrt(x**2+y**2)
arg=atan2(y,x)
henkaku=arg-sen1_arg
x2_2=sen1[0]+xy*cos(henkaku)
y2_2=sen1[1]+xy*sin(henkaku)
x=x2_2-x2_1
y=y2_2-y2_1
delta=y/x
y=y1_1-y2_1
dx=y/delta
kouten_x=x2_1+dx
kouten_y=y1_1
x=kouten_x-x1_1
kouten_xt=x1_1+x*cos(sen1_arg)
kouten_yt=y1_1+x*sin(sen1_arg)
if kouten_xt && kouten_yt
return [kouten_xt,kouten_yt]
else
nil
end
end
d1=38.0;d2=32.0;l2=1000.0;bunkaku=10.0;l1=1000.0;kakudo=60.0
while ARGV.size>1
case argument=ARGV.pop
when /\/a/
d1=argument[2..-1].to_f
when /\/b/
l1=argument[2..-1].to_f
when /\/c/
d2=argument[2..-1].to_f
when /\/d/
bunkaku=argument[2..-1].to_f
when /\/e/
kakudo=argument[2..-1].to_f
end
end
r1=d1/2;r2=d2/2
n=(360/bunkaku).to_i
bun_arg=bunkaku*2*PI/360
kakudo_arg=kakudo*2*PI/360
kakudo_arg2=kakudo_arg+PI/2
x1,y1=l1,-r1
x2,y2=l2*cos(kakudo_arg),l2*sin(kakudo_arg)
a2=r2/sin(kakudo_arg)
sen3=[a2,0,a2+r2*cos(kakudo_arg2),r2*sin(kakudo_arg2)]
arg=0
zahyo=[]
(n+1).times{
arg_x2=x2+r2*cos(arg+kakudo_arg)
arg_y2=y2+r2*sin(arg+kakudo_arg)
sen2=[arg_x2,arg_y2,arg_x2+r2*cos(kakudo_arg),arg_y2+r2*sin(kakudo_arg)]
arg_l=r2*cos(arg)
arg_y=sqrt(r1**2-arg_l**2)
arg1=atan2(arg_y,arg_l)
arg_x1=x1+r1*cos(arg1)
arg_y1=y1+r1*sin(arg1)
sen1=[arg_x1,arg_y1,arg_x1+r1,arg_y1]
kouten_x1,kouten_y1=sen_sen_kouten2(sen1,sen2)
if arg1<PI/2
r1_l=r1*(PI/2-arg1)
else
r1_l=-r1*(arg1-PI/2)
end
zahyo<<[kouten_x1,r1_l]
arg += bun_arg
}
puts "pl"
zahyo.each{|a,b|puts("#{a} #{b}")}
puts "#"
printf("%.11f %.11f %.11f %.11f\n",l1/2,r1*PI,-l1/2,r1*PI)
printf("%.11f %.11f %.11f %.11f\n",l1/2,-r1*PI,-l1/2,-r1*PI)
printf("%.11f %.11f %.11f %.11f\n",l1/2,r1*PI,l1/2,-r1*PI)
printf("%.11f %.11f %.11f %.11f\n",-l1/2,r1*PI,-l1/2,-r1*PI)
open("座標.txt","w"){|f|
f.printf("%4s%10s%10s\n","点名","X座標","Y座標")
point=1
zahyo.each{|a,b|
puts("pt #{a} #{b}")
f.printf("%4d %10.3f %10.3f\n",point,a,b)
point += 1
}
}
system("notepad 座標.txt")
__END__
:end