Jw_cad 相談室−その2 New

 Jw_cad についての相談の場としてお使いください
情報の交換には Jw_cad 情報交換室 をご利用ください
なお、情報交換室と相談室の両方に同じ内容を投稿するのはご遠慮ください

2009年9月以前の発言過去ログのページからご覧ください。

それ以降の過去ログは消失しています。
申し訳ありませんが、復活の予定はありません。


  新規投稿 ┃ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索 ┃設定 ┃過去ログ ┃ホーム  
229 / 1492     ←次へ | 前へ→

外部変形の円・円弧内 消去 修正その1
 kojima  - 17/3/15(水) 21:03 -
@REM 円内の直線を消去
@echo off
REM #jww
REM #cd
REM #ht10
REM #ht30
REM #zz
REM #zw
REM #zc
REM #h2
REM #hp
REM #e
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt > jwc_temp.txt
pause
goto end
#!ruby -Ks
include Math
#3線と円の交点角度の配列を返す(扁平率は考慮しない)
def sen_en_kakudo(sen,en)
kakudo=[]
if en.size==4
x=en[1]
y=en[2]
r=en[3]
en[4]=0
en[5]=0
en[6]=1
en[7]=0
else
x=en[1]
y=en[2]
r=en[3]
end
hen=en[6]
ziku=en[7]
ziku_arg=ziku*2*PI/360
sen_x=sen[2]-sen[0]
sen_y=sen[3]-sen[1]
sen_kakudo1=atan2(sen_y,sen_x)
en_x1=x-sen[0]
en_y1=y-sen[1]
en_x2=sen[2]-x
en_y2=sen[3]-y
en_xy1=sqrt(en_x1**2+en_y1**2)
en_xy2=sqrt(en_x2**2+en_y2**2)
en_kakudo1=atan2(en_y1,en_x1)
en_kakudo2=atan2(en_y2,en_x2)
if hen==1 && ziku==0
sen_x1=sen[0]
sen_y1=sen[1]
sen_x2=sen[2]
sen_y2=sen[3]
else
sen_x1=x-en_xy1*cos(en_kakudo1-ziku_arg)
sen_y1=y-en_xy1*sin(en_kakudo1-ziku_arg)/hen
sen_x2=x+en_xy2*cos(en_kakudo2-ziku_arg)
sen_y2=y+en_xy2*sin(en_kakudo2-ziku_arg)/hen
end
if sen_x1>sen_x2
sen_x1,sen_x2=sen_x2,sen_x1
sen_y1,sen_y2=sen_y2,sen_y1
elsif sen_x1==sen_x2
if sen_y1>sen_y2
sen_y1,sen_y2=sen_y2,sen_y1
end
end
senx=(sen_x2-sen_x1)
seny=(sen_y2-sen_y1)
sen_kakudo2=atan2(seny,senx)
en_kakudo2_1=atan2((y-sen_y1),x-sen_x1)
en_xy2_1=sqrt((y-sen_y1)**2+(x-sen_x1)**2)
en_xy2_2=sqrt((sen_y2-y)**2+(sen_x2-x)**2)
henkaku=sen_kakudo2-en_kakudo2_1
y1=en_xy2_1*sin(henkaku)
if r>y1.abs
x1=sqrt(r**2-y1**2)
kakudo1=atan2(y1,-x1)
kakudo2=atan2(y1,x1)
if en_xy2_1>r && (sen_x1<en[1]+r*
cos(kakudo1+sen_kakudo2) && sen_x2>en[1]+r*
cos(kakudo1+sen_kakudo2) or
sen_y1<en[2]+r*
sin(kakudo1+sen_kakudo2) && sen_y2>en[2]+r*
sin(kakudo1+sen_kakudo2))
kakudo<<(kakudo1+sen_kakudo2)*360/(2*PI)+ziku
end
if en_xy2_2>r && (sen_x2>en[1]+r*
cos(kakudo2+sen_kakudo2) && sen_x1<en[1]+r*
cos(kakudo2+sen_kakudo2) or
sen_y2>en[2]+r*
sin(kakudo2+sen_kakudo2) &&
sen_y1<en[2]+r*sin(kakudo2+sen_kakudo2))
kakudo<<(kakudo2+sen_kakudo2)*360/(2*PI)+ziku
end
end
if kakudo.size!=0
kakudo.collect!{|item|
if item<0
360+item
else
item
end
}
return kakudo
else
return nil
end
end
#5線と円の交点座標の配列を返す(扁平率・軸角考慮)
def sen_en_zahyo(sen,en)
zahyo=[]
if en.size==4
x=en[1]
y=en[2]
r=en[3]
en[4]=0
en[5]=0
en[6]=1
en[7]=0
else
x=en[1]
y=en[2]
r=en[3]
end
hen=en[6]
ziku=en[7]
kakudo=sen_en_kakudo(sen,en) if sen_en_kakudo(sen,en)
if kakudo
kakudo.each{|item| rajian=item*2*PI/360
ziku_arg=ziku*2*PI/360
ax=r*cos(rajian-ziku_arg)
ay=r*sin(rajian-ziku_arg)*hen
axy=sqrt(ax**2+ay**2)
arg=atan2(ay,ax)
axt=x+axy*cos(arg+ziku_arg)
ayt=y+axy*sin(arg+ziku_arg)
zahyo<<[axt,ayt]
}
end
if zahyo.size>0
return zahyo
else
return nil
end
end
#tenの位置がenの内(true)か、外(false)かを判定
def area(en,ten)
zahyo=[]
zahyo<<sen_en_zahyo([0,0,ten[0],ten[1]],en) if sen_en_zahyo([0,0,ten[0],ten[1]],en)
if(zahyo.flatten).size==2
return true
else
return false
end
end
#点が円上にあるか?
def ten_en_kouten?(ten,en)
if en.size==4
en[4]=0
en[5]=360
en[6]=1
en[7]=0
end
en[5]+=360 if en[4]==en[5]
ten_arg=atan2(ten[1],ten[0])
tenx=ten[0]-en[1]
teny=ten[1]-en[2]
tenxy=sqrt(tenx**2+teny**2)
x=en[3]*cos(ten_arg-en[7]*2*PI/360)
y=en[3]*sin(ten_arg-en[7]*2*PI/360)*en[6]
xy=sqrt(x**2+y**2)
if ika3(tenxy)==ika3(xy)
return true
else
return false
end
end
#数値の小数点3桁以下を切り捨て
def ika3(x)
a=(((x.to_f)*1000000).to_i/1000000.to_f)
return a
end


引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko@ai126146114147.53.access-internet.ne.jp>
・ツリー全体表示

外部変形の円・円弧内 消去 snackpan 17/3/12(日) 16:06
Re:外部変形の円・円弧内 消去 P 17/3/12(日) 16:59
Re:外部変形の円・円弧内 消去 snackpan 17/3/12(日) 23:19
外部変形の円・円弧内 消去 その1 kojima 17/3/13(月) 8:52
Re:外部変形の円・円弧内 消去 R.N 17/3/15(水) 16:07
Re:外部変形の円・円弧内 消去 P 17/3/15(水) 18:44
外部変形の円・円弧内 消去 修正その1 kojima 17/3/15(水) 21:03
外部変形の円・円弧内 消去 修正その2 kojima 17/3/15(水) 21:04
Re:外部変形の円・円弧内 消去 修正その2 R.N 17/3/16(木) 18:42

229 / 1492     ←次へ | 前へ→
  新規投稿 ┃ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索 ┃設定 ┃過去ログ ┃ホーム  
 381309
ページ:  ┃  記事番号:  

C-BOARD Moyuku v1.03b3
Jw_cad Copyright (C)1997-2016 Jiro Shimizu & Yoshifumi Tanaka