Jw_cad 相談室−その2 New

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

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

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


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

続き
 kojima  - 21/8/4(水) 0:35 -
#円弧上に間隔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
#楕円弧上に間隔pitchで実点を描く
def arc_ten_draw2(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]
ziku_arg=item[10]*PI/180

xy=[0]
for i in 4..item.size-1
xy<<item[i]
end

sen_a=[];bunkaku=1
daen_rensen_array(sen_a,xy,bunkaku)
if((x1-sen_a[0][0]).abs<cl && (y1-sen_a[0][1]).abs<cl)
else
sen_a.reverse!
for i in 0..sen_a.size-1
x1=sen_a[i][0]
y1=sen_a[i][1]
x2=sen_a[i][2]
y2=sen_a[i][3]
sen_a[i][0]=x2
sen_a[i][1]=y2
sen_a[i][2]=x1
sen_a[i][3]=y1
end
end

for i in 0..sen_a.size-1
x1=sen_a[i][0];
y1=sen_a[i][1];
l=hypot(sen_a[i][3]-sen_a[i][1],sen_a[i][2]-sen_a[i][0])
arg=atan2(sen_a[i][3]-sen_a[i][1],sen_a[i][2]-sen_a[i][0])
l2=pitch-yo_tyo
if l2<=l
x3=x1+l2*cos(arg);y3=y1+l2*sin(arg)
arg2=atan2(y3-r_y,x3-r_x)
rx=r*cos(arg2-ziku_arg);
ry=r*sin(arg2-ziku_arg)/item[9]
arg3=atan2(ry,rx)
rx=r*cos(arg3);ry=r*sin(arg3)*item[9]
rl=hypot(ry,rx)
x4=r_x+rl*cos(arg2);y4=r_y+rl*sin(arg2)
printf("pt %.11f %.11f\n",x4,y4)
if l2<l
n=((l+yo_tyo)/pitch).to_i
yo_tyo=(l+yo_tyo)-pitch*n
for i2 in 0..n-2
l2 += pitch
x3=x1+l2*cos(arg);y3=y1+l2*sin(arg)
arg2=atan2(y3-r_y,x3-r_x)
rx=r*cos(arg2-ziku_arg);ry=r*sin(arg2-ziku_arg)/item[9]
arg3=atan2(ry,rx)
rx=r*cos(arg3);ry=r*sin(arg3)*item[9]
rl=hypot(ry,rx)
x4=r_x+rl*cos(arg2);y4=r_y+rl*sin(arg2)
printf("pt %.11f %.11f\n",x4,y4)
end
elsif l2==l
yo_tyo=0
end
else
yo_tyo += l
end
end

return yo_tyo
end
#連続線上に間隔pitchで実点を描く
def rensen_ten_draw(rensen,pitch,yo_tyo)
0.upto(rensen.size-1){|i|
if rensen[i].size==4#線データ
yo_tyo=ln_ten_draw(rensen[i],pitch,yo_tyo)
else#円弧データ
if rensen[i][9]==1
yo_tyo=arc_ten_draw(rensen[i],pitch,yo_tyo)
else
yo_tyo=arc_ten_draw2(rensen[i],pitch,yo_tyo)
end
end
}
end
#楕円弧を連続線に変更してsen_aに格納する
def daen_rensen_array(sen_a,xy,bunkaku)
cl=1
ten=daenko_siten(xy[1..-1]);x1=ten[0];y1=ten[1];
ten=daenko_syuten(xy[1..-1]);x2=ten[0];y2=ten[1];
x=xy[1];y=xy[2];r=xy[3];sikaku=xy[4];syukaku=xy[5];hen=xy[6];ziku=xy[7]
enko_kaku=syukaku-sikaku
n=(enko_kaku/bunkaku).to_i
if n==0
sen_a<<[x1,y1,x2,y2]
return 1
end
s_arg=sikaku*PI/180
ziku_arg=ziku*PI/180
bun_arg=bunkaku*PI/180
x2_2=0;y2_2=0
0.upto(n-2){|i|
rx=r*cos(s_arg)
ry=r*sin(s_arg)*hen
l=hypot(ry,rx)
arg=atan2(ry,rx)
x1_2=x+l*cos(arg+ziku_arg)
y1_2=y+l*sin(arg+ziku_arg)

rx=r*cos(s_arg+bun_arg)
ry=r*sin(s_arg+bun_arg)*hen
l=hypot(ry,rx)
arg=atan2(ry,rx)
x2_2=x+l*cos(arg+ziku_arg)
y2_2=y+l*sin(arg+ziku_arg)
sen_a<<[x1_2,y1_2,x2_2,y2_2]

s_arg += bun_arg
}
if (x2-x2_2).abs<cl && (y2-y2_2).abs<cl
else
sen_a<<[x2_2,y2_2,x2,y2]
end
return 0
end
#連続線の総延長を返す
def rensen_total_l(rensen)
t_l=0
0.upto(rensen.size-1){|i|
if rensen[i].size==4#線データ
l=hypot(rensen[i][3]-rensen[i][1],rensen[i][2]-rensen[i][0])
else
if rensen[i][9]==1
r=rensen[i][6]
arg=(rensen[i][8]-rensen[i][7])*PI/180
l=r*arg
else
sen_a=[];bunkaku=1
xy=rensen[i][3..-1]
daen_rensen_array(sen_a,xy,bunkaku)
l=0
0.upto(sen_a.size-1){|i2|
l += hypot(sen_a[i2][3]-sen_a[i2][1],sen_a[i2][2]-sen_a[i2][0])
}
end
end
t_l += l
}
return t_l
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@ai126170232220.41.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

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

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