Jw_cad 情報交換室−その3New

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

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

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


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

不要な極小線の削除について sato 20/3/29(日) 20:52

Re:不要な極小線の削除について 96saka 20/3/29(日) 23:22
Re:不要な極小線の削除について sato 20/3/30(月) 1:11
Re:不要な極小線の削除について 96saka 20/3/30(月) 2:19
Re:不要な極小線の削除について sato 20/3/30(月) 19:27

Re:不要な極小線の削除について
 96saka  - 20/3/29(日) 23:22 -
▼satoさん:

下記は如何でしょう。

過去ログ
http://www.jwcad.net/log/consult2/consult2-0701-03/title.htm#19040

注意点
スクリプトの98行目に当たる部分ですが
過去ログへ移る際にどうも改行が上手くいかないのだそうで、書き換えを要します。


この行 ↓ の記述を
ika3(y2_2)        ika3(y2_1)        ika3(y2_2)>=ika3(y1_1)

次の3行 ↓ に置き換える
ika3(y2_2)<ika3(y1_1) or
ika3(y2_1)<ika3(y1_1) &&
ika3(y2_2)>=ika3(y1_1)


これでいけると思います。

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36 Sleipni...@i114-181-167-227.s41.a002.ap.plala.or.jp>
・ツリー全体表示

Re:不要な極小線の削除について
 sato  - 20/3/30(月) 1:11 -
96sakaさん
早速の返事ありがとうございました
98行目を変更してやってみたのですがうまくいかず
batにpause入れたところ
線消.rb:130: void value expression
線消.rb:131: syntax error
が出てきてしまい行き詰ってしまいました。

長文で申し訳ないのですが
線消.rbはこれでよろしいでしょうか
(130行目131行目は最終行から3行目と2行目のendです)

include Math;$max_l=50;$min_l=0
while ARGV.size>1
case argument=ARGV.pop
when /\/a/
$max_l=argument[2..-1].to_f
when /\/b/
$min_l=argument[2..-1].to_f
end
end
def main
hp=[];zukei=[]
while ARGF.gets
xy=split
if xy[0]=~/^hp/
hp<<[xy[1].to_f,xy[2].to_f]
end
end
hp<0 && hp[0] != hp[-1]
0.upto(hp.size-2){|i|zukei<<[hp[i][0],hp[i][1],hp[i+1][0],hp[i+1][1]]}

puts "hd"
open("temp.txt","r"){|f|
while line=f.gets
xy=split
if xy[0]=~/^hq/
elsif xy[0]=~/^\d/
xy.collect!{|item|item.to_f}
x,y=xy[2]-xy[0],xy[3]-xy[1]
l=sqrt(x**2+y**2)

if zukei.size>0
if area(zukei,[xy[0],xy[1]]) && area(zukei,[xy[2],xy[3]])
if $min_l==0
if l<$max_l
else
print $_
end
else
if l<$max_l && l>$min_l
else
print $_
end
end
else
print $_
end
else
if $min_l ==0
if l<$max_l
else
print $_
end
else
if l<$max_l && l>$min_l
else
print $_
end
end
end
else
print $_
end
end
}
end
#線と線の交点を返す(延長線上は含まない)
def sen_sen_kouten(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

if ika3(y2_1)>=ika3(y1_1) &&
ika3(y2_2)<ika3(y1_1) or
ika3(y2_1)<ika3(y1_1) &&
ika3(y2_2)>=ika3(y1_1)
y=y1_1-y2_1
dx=y/delta
kouten_x=x2_1+dx
kouten_y=y1_1
if kouten_x>=x1_1 && kouten_xkouten_x>x1_1 && kouten_x<=x1_2
x=kouten_x-x1_1
y=kouten_y-y1_1
xy=sqrt(x**2+y**2)
kouten_xt=x1_1+xy*cos(sen1_arg)
kouten_yt=y1_1+xy*sin(sen1_arg)
return [kouten_xt,kouten_yt]
else
nil
end
end
end
def ika3(x)
a=(((x.to_f)*1000).to_i/1000.to_f)
return a
end
#tenの位置がzukei(閉鎖図形)の内(true)か、外(false)かを判定
def area(zukei,ten)

zahyo=[]
zukei.each{|item|zahyo<
if zahyo.size==1 or zahyo.size>1 && zahyo.size%2==1
return true
else
return false
end
end
main

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko@110-130-91-87.rev.home.ne.jp>
・ツリー全体表示

Re:不要な極小線の削除について
 96saka  - 20/3/30(月) 2:19 -
▼satoさん: すみません、検証不足でした。 過去ログでは他に 18行目、105行目、126行目もおかしくなっていたようです。 当時の記事からのオリジナルスクリプトを下記に記述します。 include Math;$max_l=50;$min_l=0 while ARGV.size>1 case argument=ARGV.pop when /\/a/ $max_l=argument[2..-1].to_f when /\/b/ $min_l=argument[2..-1].to_f end end def main hp=[];zukei=[] while ARGF.gets xy=split if xy[0]=~/^hp/ hp<<[xy[1].to_f,xy[2].to_f] end end hp<<hp[0] if hp.size>0 && hp[0] != hp[-1] 0.upto(hp.size-2){|i|zukei<<[hp[i][0],hp[i][1],hp[i+1][0],hp[i+1][1]]} puts "hd" open("temp.txt","r"){|f| while line=f.gets xy=split if xy[0]=~/^hq/ elsif xy[0]=~/^\d/ xy.collect!{|item|item.to_f} x,y=xy[2]-xy[0],xy[3]-xy[1] l=sqrt(x**2+y**2) if zukei.size>0 if area(zukei,[xy[0],xy[1]]) && area(zukei,[xy[2],xy[3]]) if $min_l==0 if l<$max_l else print $_ end else if l<$max_l && l>$min_l else print $_ end end else print $_ end else if $min_l ==0 if l<$max_l else print $_ end else if l<$max_l && l>$min_l else print $_ end end end else print $_ end end } end #線と線の交点を返す(延長線上は含まない) def sen_sen_kouten(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 if ika3(y2_1)>=ika3(y1_1) && ika3(y2_2)<ika3(y1_1) or ika3(y2_1)<ika3(y1_1) && ika3(y2_2)>=ika3(y1_1) y=y1_1-y2_1 dx=y/delta kouten_x=x2_1+dx kouten_y=y1_1 if kouten_x>=x1_1 && kouten_x<x1_2 or kouten_x>x1_1 && kouten_x<=x1_2 x=kouten_x-x1_1 y=kouten_y-y1_1 xy=sqrt(x**2+y**2) kouten_xt=x1_1+xy*cos(sen1_arg) kouten_yt=y1_1+xy*sin(sen1_arg) return [kouten_xt,kouten_yt] else nil end end end def ika3(x) a=(((x.to_f)*1000).to_i/1000.to_f) return a end #tenの位置がzukei(閉鎖図形)の内(true)か、外(false)かを判定 def area(zukei,ten) zahyo=[] zukei.each{|item|zahyo<<sen_sen_kouten(item,[0,0,ten].flatten) if sen_sen_kouten(item,[0,0,ten].flatten)} if zahyo.size==1 or zahyo.size>1 && zahyo.size%2==1 return true else return false end end main
引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36 Sleipni...@i114-181-167-227.s41.a002.ap.plala.or.jp>
・ツリー全体表示

Re:不要な極小線の削除について
 sato  - 20/3/30(月) 19:27 -
96sakaさん

ありがとうございました。
深夜なのに返事いただいていて恐縮しました。
昨夜は力尽きて寝てしまい今職場に戻ってきたところです。
結論から申し上げますと完璧に5万本の線が消えてくれました。
96sakaさんにご多幸がありますことを・・・
本当にありがとうございました。

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko@110-130-108-231.rev.home.ne.jp>
・ツリー全体表示

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

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