過去ログ

                                Page     556
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼外部変形の円・円弧内 消去  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

 ───────────────────────────────────────
 ■題名 : 外部変形の円・円弧内 消去
 ■名前 : snackpan
 ■日付 : 17/3/12(日) 16:06
 -------------------------------------------------------------------------
   教えてください。
外部変形の円・円弧内 消去ですがSnap_Kinさん作のものは無くなったのでしょうか?
出来れば複数の円を選択して円内消去をしたいのです。
または同様の物はありませんか?(Win7,Win10)

 ───────────────────────────────────────  ■題名 : Re:外部変形の円・円弧内 消去  ■名前 : P  ■日付 : 17/3/12(日) 16:59  -------------------------------------------------------------------------
   ▼snackpanさん:
>教えてください。
>外部変形の円・円弧内 消去ですがSnap_Kinさん作のものは無くなったのでしょうか?
>出来れば複数の円を選択して円内消去をしたいのです。
>または同様の物はありませんか?(Win7,Win10)

複数の円弧は出来ないようですが、試してみたらどうでしょうか?
http://www.vector.co.jp/soft/dos/business/se023206.html

Snap_KinさんのHPは既に無くなっています
円・円弧内 消去の説明書に
無断でネットを利用した配布はしないでください。
と書かれていますので、手に入れるのは難しいと思います。

 ───────────────────────────────────────  ■題名 : Re:外部変形の円・円弧内 消去  ■名前 : snackpan  ■日付 : 17/3/12(日) 23:19  -------------------------------------------------------------------------
   ▼Pさん:
>▼snackpanさん:
>>教えてください。
>>外部変形の円・円弧内 消去ですがSnap_Kinさん作のものは無くなったのでしょうか?
>>出来れば複数の円を選択して円内消去をしたいのです。
>>または同様の物はありませんか?(Win7,Win10)
>
>複数の円弧は出来ないようですが、試してみたらどうでしょうか?
>http://www.vector.co.jp/soft/dos/business/se023206.html
>
>Snap_KinさんのHPは既に無くなっています
>円・円弧内 消去の説明書に
>無断でネットを利用した配布はしないでください。
>と書かれていますので、手に入れるのは難しいと思います。

ありがとうございます。
Snap_Kinさんのはそういうことなんですね。
教えていただいた外部変形で試してみます。

 ───────────────────────────────────────  ■題名 : 外部変形の円・円弧内 消去 その1  ■名前 : kojima  ■日付 : 17/3/13(月) 8:52  -------------------------------------------------------------------------
   バッチファイルにrubyスクリプトを記述するタイプの外部変形です。
(Rubyのインストールが必要)


@REM 円内の直線を消去
@echo off
REM #jww
REM #cd
REM #ht10
REM #ht30
REM #zz
REM #zw
REM #zc
REM #h2
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

 ───────────────────────────────────────  ■題名 : Re:外部変形の円・円弧内 消去  ■名前 : R.N  ■日付 : 17/3/15(水) 16:07  -------------------------------------------------------------------------
   ▼kojimaさん:

外変公開、感謝いたします。
試用させて頂きました。

その1・2を結合して、BATとして保存したのですが---
実行しても、エラー等は表示されないのですが、現状のままで、円内を消去することができません?
何か不手際があるでしょうか?

win10-64,Ruby-186,jww7.11

 ───────────────────────────────────────  ■題名 : Re:外部変形の円・円弧内 消去  ■名前 : P  ■日付 : 17/3/15(水) 18:44  -------------------------------------------------------------------------
   ▼R.Nさん:

>その1・2を結合して、BATとして保存したのですが---
>実行しても、エラー等は表示されないのですが、現状のままで、円内を消去することができません?
>何か不手際があるでしょうか?
>
>win10-64,Ruby-186,jww7.11

消去したい線と円が同一レイヤグループにありますか?
違う場合はR.Nさんと同じ症状になりました

▼kojimaさん
公開有り難うございます
円弧でも消去出来るのですね

 ───────────────────────────────────────  ■題名 : 外部変形の円・円弧内 消去 修正その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

 ───────────────────────────────────────  ■題名 : 外部変形の円・円弧内 消去 修正その2  ■名前 : kojima  ■日付 : 17/3/15(水) 21:04  -------------------------------------------------------------------------
   en=[];naigai=[]
while ARGF.gets
xy=$_.split
if xy[0]=~/^ci/
xy.collect!{|item|item.to_f}
en<<xy
end
end
puts "hd"
open("temp.txt","r"){|f|
while line=f.gets
xy=line.split
if xy[0]=~/^hq/
elsif xy[0]=~/^\d|^-/
xy.collect!{|item|item.to_f}
if xy[0]>xy[2]
xy[0],xy[2],xy[1],xy[3]=xy[2],xy[0],xy[3],xy[1]
elsif xy[0]==xy[2]
if xy[1]>xy[3]
xy[1],xy[3]=xy[3],xy[1]
end
end
xy2=xy.collect{|item|ika3(item)}
arg=atan2(xy2[3]-xy2[1],xy2[2]-xy2[0])
kouten=[];area1=0;area2=0
en.each{|item|
if sen_en_zahyo(xy2,item)!=nil
if sen_en_zahyo(xy2,item).size==2
kouten<<[sen_en_zahyo(xy2,item)[0][0],sen_en_zahyo(xy2,item)[0][1]]
kouten<<[sen_en_zahyo(xy2,item)[1][0],sen_en_zahyo(xy2,item)[1][1]]
elsif sen_en_zahyo(xy2,item).size==1
kouten<<[sen_en_zahyo(xy2,item)[0][0],sen_en_zahyo(xy2,item)[0][1]]
end
end
if area(item,[xy2[0],xy2[1]])==true
area1+=1
end
if area(item,[xy2[2],xy2[3]])==true
area2+=1
end
}
if xy[0]==xy[2]
kouten2=kouten.sort{|a,b|a[1]<=>b[1]}
else
kouten2=kouten.sort{|a,b|a[0]<=>b[0]}
end
if area1==0 && kouten2.size>0
printf("%.11f %.11f %.11f %.11f\n",xy[0],xy[1],kouten2[0][0],kouten2[0][1])
end
if area2==0 && kouten2.size>0
printf("%.11f %.11f %.11f %.11f\n",xy[2],xy[3],kouten2[-1][0],kouten2[-1][1])
end
if kouten2.size>=2
area1==0 ? n1=1 : n1=0
area2==0 ? n2=kouten2.size-3 : n2=kouten2.size-2
n1.step(n2,2){|i|printf("%.11f %.11f %.11f %.11f\n",kouten2[i][0],kouten2[i][1],kouten2[i+1][0],kouten2[i+1][1])}
end
if kouten.size==0 && area1==0 && area2==0
print line
end
naigai<<area2
elsif xy[0]=~/^pt/
area1=0
en.each{|item|
if area(item,[xy[1].to_f,xy[2].to_f])==true
area1+=1
end
}
print line if area1==0
else
print line
end
end
}
__END__
:end

 ───────────────────────────────────────  ■題名 : Re:外部変形の円・円弧内 消去 修正その2  ■名前 : R.N  ■日付 : 17/3/16(木) 18:42  -------------------------------------------------------------------------
   ▼kojimaさん:

修正ありがとうございます。
消去できました。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 556