@REM 線指示(底辺)・高さ・辺長入力で作図
@echo off
REM #jww
REM #cd
REM #1ln底辺の線を指示してください
REM #2作図方向を指示してください free(L) Read(R)
REM #c辺の長さを入力してください/_/a
REM #c高さを入力してください/_/b
REM #e
copy jwc_temp.txt temp.txt > nul
ruby -Ks 三角形作図.rb temp.txt %1 %2 > jwc_temp.txt
◎スクリプトファイル(ファイル名 三角形作図.rb)
include Math
while ARGV.size>1
case argument=ARGV.pop
when /\/a/
l=argument[2..-1].to_f
when /\/b/
h=argument[2..-1].to_f
end
end
def sen(x1,y1,x2,y2)
printf("%.11f %.11f %.11f %.11f\n",x1,y1,x2,y2)
end
while ARGF.gets
xy=split
if xy[0] =~ /^\d|^-/
xy.collect!{|item|item.to_f}
ln=xy
elsif xy[0] =~ /^hp1ln$/
x1,y1=xy[1].to_f,xy[2].to_f
elsif xy[0] =~ /^hp2$/
x2,y2=xy[1].to_f,xy[2].to_f
end
end
if h && l && l>h
l1=sqrt((x1-ln[0])**2+(y1-ln[1])**2)
l2=sqrt((x1-ln[2])**2+(y1-ln[3])**2)
ln[0],ln[2],ln[1],ln[3]=ln[2],ln[0],ln[3],ln[1] if l1>l2
arg1=atan2(ln[3]-ln[1],ln[2]-ln[0])
arg2=atan2(y2-ln[1],x2-ln[0])
henkaku=arg2-arg1
y=l*sin(henkaku)
lnx=sqrt(l**2-h**2)
arg3=atan2(h,lnx)
y<0 ? arg=arg1-arg3 : arg=arg1+arg3
px=ln[0]+l*cos(arg)
py=ln[1]+l*sin(arg)
sen(ln[0],ln[1],ln[2],ln[3])
sen(ln[0],ln[1],px,py)
sen(ln[2],ln[3],px,py)
else
printf("h#入力が不適当です\n")
end
@REM 線指示(斜辺)・高さ・底辺長入力で作図
@echo off
REM #jww
REM #cd
REM #1ln斜辺の線を指示してください
REM #2作図方向を指示してください free(L) Read(R)
REM #c底辺の長さを入力してください/_/a
REM #c高さを入力してください/_/b
REM #e
copy jwc_temp.txt temp.txt > nul
ruby -Ks 三角形作図2.rb temp.txt %1 %2 > jwc_temp.txt
◎スクリプトファイル(ファイル名 三角形作図2.rb)
include Math
while ARGV.size>1
case argument=ARGV.pop
when /\/a/
l=argument[2..-1].to_f
when /\/b/
h=argument[2..-1].to_f
end
end
def sen(x1,y1,x2,y2)
printf("%.11f %.11f %.11f %.11f\n",x1,y1,x2,y2)
end
while ARGF.gets
xy=split
if xy[0] =~ /^\d|^-/
xy.collect!{|item|item.to_f}
ln=xy
elsif xy[0] =~ /^hp1ln$/
x1,y1=xy[1].to_f,xy[2].to_f
elsif xy[0] =~ /^hp2$/
x2,y2=xy[1].to_f,xy[2].to_f
end
end
hentyo=sqrt((ln[2]-ln[0])**2+(ln[3]-ln[1])**2)
if h && l && hentyo>h
l1=sqrt((x1-ln[0])**2+(y1-ln[1])**2)
l2=sqrt((x1-ln[2])**2+(y1-ln[3])**2)
ln[0],ln[2],ln[1],ln[3]=ln[2],ln[0],ln[3],ln[1] if l1>l2
arg1=atan2(ln[3]-ln[1],ln[2]-ln[0])
arg2=atan2(y2-ln[1],x2-ln[0])
henkaku=arg2-arg1
y=l*sin(henkaku)
lnx=sqrt(hentyo**2-h**2)
arg3=atan2(h,lnx)
y<0 ? arg=arg1-arg3 : arg=arg1+arg3
px=ln[0]+l*cos(arg)
py=ln[1]+l*sin(arg)
sen(ln[0],ln[1],ln[2],ln[3])
sen(ln[0],ln[1],px,py)
sen(ln[2],ln[3],px,py)
else
printf("h#入力が不適当です\n")
end