Jw_cad 相談室−その2 New

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

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

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


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

その1
 kojima  - 21/8/1(日) 0:30 -
@REM 連続線(円弧含)上に等間隔で実点を描く
@echo off
REM #jww
REM #cd
goto %1
REM #hm|距離指定(L)|分割数指定(R)|
REM #:1
REM #h1
REM #1連続線の始点を順に右クリックしてください
REM #99#
REM #c間隔 無指定:200/_/a
REM #k|1)線端起点(L)|2)両端均等(R)|/_/b
REM #hp
REM #e
REM #:2
REM #h1
REM #1連続線の始点を順に右クリックしてください
REM #99#
REM #c分割数 無指定:10/_/c
REM #hp
REM #e
:1
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt %1 %2 %3> jwc_temp.txt
pause
goto end
:2
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt %1 %2> jwc_temp.txt
pause
goto end
#!ruby -Ks
include Math
#楕円弧の始点座標を返す
def daenko_siten(zahyo)
if zahyo.size==7
x=zahyo[0]
y=zahyo[1]
r=zahyo[2]
siten=zahyo[3]
hen=zahyo[5]
ziku=zahyo[6]
rajian=siten*PI/180
ziku_arg=ziku*PI/180
zahyo_x=r*cos(rajian)
zahyo_y=r*sin(rajian)*hen
zahyo_xy=hypot(zahyo_y,zahyo_x)
zahyo_arg=atan2(zahyo_y,zahyo_x)
zahyo_xt=x+zahyo_xy*cos(zahyo_arg+ziku_arg)
zahyo_yt=y+zahyo_xy*sin(zahyo_arg+ziku_arg)
return zahyo_xt,zahyo_yt
end
end
#楕円弧の終点座標を返す
def daenko_syuten(zahyo)
if zahyo.size==7
x=zahyo[0]
y=zahyo[1]
r=zahyo[2]
syuten=zahyo[4]
hen=zahyo[5]
ziku=zahyo[6]
rajian=syuten*PI/180
ziku_arg=ziku*PI/180
zahyo_x=r*cos(rajian)
zahyo_y=r*sin(rajian)*hen
zahyo_xy=hypot(zahyo_y,zahyo_x)
zahyo_arg=atan2(zahyo_y,zahyo_x)
zahyo_xt=x+zahyo_xy*cos(zahyo_arg+ziku_arg)
zahyo_yt=y+zahyo_xy*sin(zahyo_arg+ziku_arg)
return zahyo_xt,zahyo_yt
end
end
#線の配列senから閉鎖図形・連続線を区分けする
def loop_renzoku_seach(sen,ten)
cl=1;flg=0;i=0
x=ten[0];y=ten[1]
0.upto(sen.size-1){|i|
if (sen[i][0]-x).abs<cl && (sen[i][1]-y).abs<cl or (sen[i][2]-x).abs<cl && (sen[i][3]-y).abs<cl
flg=1;break;
end
}
if flg==1
b=sen[i];sen.delete(sen[i])
end
if(b[2]-x).abs<cl && (b[3]-y).abs<cl
if b.size==4
a=[b[2],b[3],b[0],b[1]]
else
a=[b[2],b[3],b[0],b[1],b[4],b[5],b[6],b[7],b[8],b[9],b[10]]
end
else
if b.size==4
a=[b[0],b[1],b[2],b[3]]
else
a=[b[0],b[1],b[2],b[3],b[4],b[5],b[6],b[7],b[8],b[9],b[10]]
end
end
renzoku=[a];flg=1
while flg==1
flg=0
0.upto(sen.size-1){|i|
if (sen[i][0]-a[2]).abs<cl && (sen[i][1]-a[3]).abs<cl or (sen[i][2]-a[2]).abs<cl && (sen[i][3]-a[3]).abs<cl
flg=1;break;
end
}
if flg==1
b=sen[i];size=renzoku.size
if (renzoku[size-1][2]-b[0]).abs<cl && (renzoku[size-1][3]-b[1]).abs<cl
if b.size==4
a=[b[0],b[1],b[2],b[3]]#線データ
else
a=[b[0],b[1],b[2],b[3],b[4],b[5],b[6],b[7],b[8],b[9],b[10]]#円弧データ
end
elsif (renzoku[size-1][2]-b[2]).abs<cl && (renzoku[size-1][3]-b[3]).abs<cl
if b.size==4
a=[b[2],b[3],b[0],b[1]]#線データ
else
a=[b[2],b[3],b[0],b[1],b[4],b[5],b[6],b[7],b[8],b[9],b[10]]#円弧データ
end
end
renzoku<<a
sen.delete(sen[i])
end
end
return renzoku
end
#線上に間隔pitchで実点を描く
def ln_ten_draw(item,pitch,yo_tyo)
x1=item[0];y1=item[1];
l=sqrt((item[3]-item[1])*(item[3]-item[1])+(item[2]-item[0])*(item[2]-item[0]))
arg=atan2(item[3]-item[1],item[2]-item[0])
l2=pitch-yo_tyo
if l2<=l
printf("pt %.11f %.11f\n",x1+l2*cos(arg),y1+l2*sin(arg))
if l2<l
n=((l+yo_tyo)/pitch).to_i
yo_tyo=(l+yo_tyo)-pitch*n
0.upto(n-2){|i|
l2 += pitch
printf("pt %.11f %.11f\n",x1+l2*cos(arg),y1+l2*sin(arg))
}
elsif l2==l
yo_tyo=0
end
else
yo_tyo += l
end
return yo_tyo
end
#円弧上に間隔pitchで実点を描く
def arc_ten_draw(item,pitch,yo_tyo)
cl=1
x1=item[0];y1=item[1];x2=item[2];y2=item[3]
r_x=item[4];r_y=item[5];r=item[6];sikaku=item[7];syukaku=item[8]
arg=(syukaku-sikaku)*PI/180
l=r*arg
l2=pitch-yo_tyo
d_arg=l2/r
zahyo=[]
4.upto(item.size-1){|i|zahyo<<item[i]}
ten=daenko_siten(zahyo)
x=ten[0];y=ten[1];
if (x-x1).abs<cl && (y-y1).abs<cl
#円弧の始角が連続線の始点
if l2<=l
pt_x=r_x+r*cos(sikaku*PI/180+d_arg)
pt_y=r_y+r*sin(sikaku*PI/180+d_arg)
printf("pt %.11f %.11f\n",pt_x,pt_y)
n=((l+yo_tyo)/pitch).to_i
yo_tyo=(l+yo_tyo)-pitch*n
0.upto(n-2){|i|
l2 += pitch
d_arg=l2/r
pt_x=r_x+r*cos(sikaku*PI/180+d_arg)
pt_y=r_y+r*sin(sikaku*PI/180+d_arg)
printf("pt %.11f %.11f\n",pt_x,pt_y)
}
elsif l2==l
pt_x=r_x+r*cos(sikaku*PI/180+d_arg)
pt_y=r_y+r*sin(sikaku*PI/180+d_arg)
printf("pt %.11f %.11f\n",pt_x,pt_y)
yo_tyo=0
else
yo_tyo += l
end
else
#円弧の終角が連続線の始点
if l2<l
pt_x=r_x+r*cos(syukaku*PI/180-d_arg)
pt_y=r_y+r*sin(syukaku*PI/180-d_arg)
printf("pt %.11f %.11f\n",pt_x,pt_y)
n=((l+yo_tyo)/pitch).to_i
yo_tyo=(l+yo_tyo)-pitch*n
0.upto(n-2){|i|
l2 += pitch
d_arg=l2/r
pt_x=r_x+r*cos(syukaku*PI/180-d_arg)
pt_y=r_y+r*sin(syukaku*PI/180-d_arg)
printf("pt %.11f %.11f\n",pt_x,pt_y)
}
elsif l2==l
pt_x=r_x+r*cos(syukaku*PI/180-d_arg)
pt_y=r_y+r*sin(syukaku*PI/180-d_arg)
printf("pt %.11f %.11f\n",pt_x,pt_y)
yo_tyo=0
else
yo_tyo += l
end
end
return yo_tyo
end


引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.62@ai126172019005.49.access-internet.ne.jp>
・ツリー全体表示

曲線上に等間隔の点 初心者ちゃん 21/7/23(金) 15:14
Re:曲線上に等間隔の点 N.Misumi 21/7/23(金) 17:08
Re:曲線上に等間隔の点 初心者ちゃん 21/7/24(土) 17:57
Re:曲線上に等間隔の点 通りすがりの後期高齢者 21/7/24(土) 15:37
Re:曲線上に等間隔の点 Keiichi 21/7/24(土) 17:45
Re:曲線上に等間隔の点 通りすがりの後期高齢者 21/7/24(土) 18:42
その1 kojima 21/8/1(日) 0:30
続き kojima 21/8/1(日) 0:31
Re:外変 R.N 21/8/1(日) 10:10
Re:外変 kojima 21/8/1(日) 10:21
Re:外変 R.N 21/8/1(日) 10:29
Re:外変(確認依頼) R.N 21/8/3(火) 19:09
[投稿者削除]
Re:外変(確認依頼) kojima 21/8/3(火) 23:13
続き kojima 21/8/4(水) 0:35
続々 kojima 21/8/4(水) 0:36
Re:外変(確認依頼) R.N 21/8/6(金) 5:25

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

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