Jw_cad 相談室−その2 New

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

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

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


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

続き
 kojima  - 21/8/1(日) 0:31 -
#楕円弧上に間隔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]
0.upto(item.size-1){|i|xy<<item[i]}
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!
0.upto(sen_a.size-1){|i|
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
0.upto(sen_a.size-1){|i|
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])
argatan2(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

0.upto(n-2){|i2|
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)
}
elsif l2==l
yo_tyo=0
end
else
yo_tyo += l
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
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
#コマンドライン引数
pitch=200;nn=10
sitei=ARGV[1].to_i
while ARGV.size>1
case argument=ARGV.pop
when /\/a/
pitch=argument[2..-1].to_f
when /\/b/
kiten=argument[2..-1].to_i
when /\/c/
nn=argument[2..-1].to_i
end
end
#メインルーチン
sen_a=[];hp_a=[]
while ARGF.gets
xy=$_.split
if xy[0]=~/^hp/
hp_a<<[xy[1].to_f,xy[2].to_f]
end
if xy[0]=~/^\d|^-/
xy.collect!{|item|item.to_f}
sen_a<<xy
end
if xy[0]=~/^ci/
xy.collect!{|item|item.to_f}
if xy.size==8
if(xy[4]>xy[5])
xy[4] -= 360
end
zahyo=xy[1..-1]
ten=daenko_siten(zahyo);
x1=ten[0];y1=ten[1];
ten=daenko_syuten(zahyo);
x2=ten[0];y2=ten[1];
if(xy[7] != 0 && xy[6]==1)
xy[4] += xy[7]
xy[5] += xy[7]
xy[7]=0
end
sen_a<<[x1,y1,x2,y2,xy[1],xy[2],xy[3],xy[4],xy[5],xy[6],xy[7]]
end
end
end
0.upto(hp_a.size-1){|i|
ten=hp_a[i]
rensen=loop_renzoku_seach(sen_a,ten)
if rensen.size>0
t_l=rensen_total_l(rensen)
if sitei==1
if kiten==2
n=(t_l/pitch).to_i
l2=pitch-((t_l-n*pitch)+pitch)/2
yo_tyo=l2
else
yo_tyo=0
end
else
pitch=t_l/nn
yo_tyo=0
end
rensen_ten_draw(rensen,pitch,yo_tyo)
end
}
__END__
: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

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

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