Jw_cad 情報交換室−その3New

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

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

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


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

座標面積計算結果について yama 21/4/15(木) 11:41
座標面積計算結果について 追記 yama 21/4/15(木) 13:10
Re:座標面積計算結果について 追記 通りすがりの後期高齢者 21/4/15(木) 17:12
Re:座標面積計算結果について 追記 卯之介 21/4/15(木) 19:41
Re:原因が解りました 通りすがりの後期高齢者 21/4/15(木) 21:24
Re:原因が解りました fujii.A 21/4/16(金) 6:02
Re:原因が解りました somem 21/4/16(金) 9:37
Re:原因が解りました 通りすがりの後期高齢者 21/4/16(金) 12:56
Re:原因が解りました fujii.A 21/4/17(土) 8:47
Re:座標面積計算結果について 追記 somem 21/4/16(金) 11:18
Re:座標面積計算結果について 追記 yama 21/4/16(金) 15:44
Re:座標面積計算結果について kojima 21/5/18(火) 8:14
Re:座標面積計算結果について kojima 21/5/23(日) 18:32
Re:座標面積計算結果について kojima 21/5/23(日) 18:33
Re:座標面積計算結果について R.N 21/5/25(火) 22:11
Re:座標面積計算結果について kojima 21/5/26(水) 11:41
Re:座標面積計算結果について R.N 21/5/26(水) 19:31

座標面積計算結果について
 yama E-MAIL  - 21/4/15(木) 11:41 -
(Xn+1 - Xn-1)・Ynを電卓等で計算してみましたが、計算結果が微妙に違います。
表示されている座標値は小数3桁ですが、その数値を使うと小数第2位で違って来る場合があります。
座標計測で有効桁を"F"として、少数以下計算桁数を4、5、6桁として計算してみたのですが、結果の小数4位以下が合いません。
多少違っても、実用上は問題ありませんが、結果が違うのは気持ちのよいものではありません。
少数以下有効何桁で計算しているのでしょうか。

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0@p750188-ipbf610yosida.nagano.ocn.ne.jp>
・ツリー全体表示

座標面積計算結果について 追記
 yama E-MAIL  - 21/4/15(木) 13:10 -
点数14点を少数以下6桁の座標値でEXCELに取り込み、計算してみたところ、計算結果表示桁全て同一の箇所が7箇所、小数3位以下が違うのが7箇所でした。
最大の差は0.002278でした。
何が原因なのでしょうか。

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0@p750188-ipbf610yosida.nagano.ocn.ne.jp>
・ツリー全体表示

Re:座標面積計算結果について 追記
 通りすがりの後期高齢者  - 21/4/15(木) 17:12 -
▼yamaさん:
>点数14点を少数以下6桁の座標値でEXCELに取り込み、計算してみたところ、計算結果表示桁全て同一の箇所が7箇所、小数3位以下が違うのが7箇所でした。
>最大の差は0.002278でした。
>何が原因なのでしょうか。


こんにちは

確かに誤差の範囲内を超えていますね。

https://i.imgur.com/SJfZnsA.jpg

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36@133-106-68-141.mvno.rakuten.jp>
・ツリー全体表示

Re:座標面積計算結果について 追記
 卯之介  - 21/4/15(木) 19:41 -
yamaさんの件はよくわかりませんが、通りすがりの後期高齢者さんの計算例を試すと
jw_cad外部変形でも「Excelによる計算表」と全く同じ数字が出ました。

が、原点位置を[-0.0005 , 0](メートルじゃなくてミリです)オフセットした時に
37.840320 になるというよくわからない現象がありました。
[0.05 , 0](0.05mm)だと座標値に影響が出たり出なかったりしながらも何故か計算結果は同じでした。

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.76@124-47-113-193.cidr4.kct.ad.jp>
・ツリー全体表示

Re:原因が解りました
 通りすがりの後期高齢者  - 21/4/15(木) 21:24 -
こんにちは、原因が解りました、
(卯之助さんの書き込みがヒントになりました)

一旦、座標ファイルに丸め処理をした座標値を保存してJWWへ呼び込めば
Excelの計算書と整合性が合います。

ZAHYOU.BATの座標面積計算は表のXY値ではなくJWWの座標値を使用して計算
しているようです。

※たぶん、JWW上の図形ではなくsimaなどの座標ファイルからの読み込みを
想定しているのではないかと想像します。

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36@133-106-68-141.mvno.rakuten.jp>
・ツリー全体表示

Re:原因が解りました
 fujii.A E-MAIL  - 21/4/16(金) 6:02 -
別件ですが…
当方も困っておりまして

JWWから座標値を測量ソフトに直接転送すると
X=、Y=、のどちらかに1mmの誤差が生じています
逆に測量ソフトから座標値をJWWに直接転送すると正常値です
やはりJWWの座標値の精度の問題でしょうか?

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0@baidcd0210a.bai.ne.jp>
・ツリー全体表示

Re:原因が解りました
 somem  - 21/4/16(金) 9:37 -
▼fujii.Aさん:

>やはりJWWの座標値の精度の問題でしょうか?

Jw_cadは、浮動小数点倍精度で、有効桁数15桁まで座標値を扱うことができます。
注)小数点以下15桁ではありません。
測量ソフト側の有効桁数をご確認ください。

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36@KD175132143241.ppp-bb.dion.ne.jp>
・ツリー全体表示

Re:座標面積計算結果について 追記
 somem  - 21/4/16(金) 11:18 -
▼yamaさん:
>点数14点を少数以下6桁の座標値でEXCELに取り込み、計算してみたところ、計算結果表示桁全て同一の箇所が7箇所、小数3位以下が違うのが7箇所でした。
>最大の差は0.002278でした。
>何が原因なのでしょうか。

Excelの計算に使用した座標値で図形は作図されていますか?
"座標ファイル"コマンドで線データを書出し、端点の座標を確認してください。

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36@KD175132143241.ppp-bb.dion.ne.jp>
・ツリー全体表示

Re:原因が解りました
 通りすがりの後期高齢者  - 21/4/16(金) 12:56 -
▼fujii.Aさん:
>別件ですが…
>当方も困っておりまして
>
>JWWから座標値を測量ソフトに直接転送すると
>X=、Y=、のどちらかに1mmの誤差が生じています
>逆に測量ソフトから座標値をJWWに直接転送すると正常値です
>やはりJWWの座標値の精度の問題でしょうか?


JWWの座標値の精度の問題では無いと思います。

画像はJWWからSIMAに保存して再度JWWに読み込んで座標計算
したもので特に問題はありませんでした。
(座標計算の座標値は数学座標として計算されています)

但し、座標原点を変更するなどの操作をすると不安定な場合が
ありました。(JWWの内部座標データが使用される?)

現時点で座標値と計算結果の整合性を100%得るならば
Excelなどで丸め処理された座標値から計算書を作成して
JWWに貼り付けた方が正解かもしれません。

http://i.imgur.com/p0U2341.jpg

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36@133-106-69-6.mvno.rakuten.jp>
・ツリー全体表示

Re:座標面積計算結果について 追記
 yama E-MAIL  - 21/4/16(金) 15:44 -
▼somemさん:
>▼yamaさん:
>>点数14点を少数以下6桁の座標値でEXCELに取り込み、計算してみたところ、計算結果表示桁全て同一の箇所が7箇所、小数3位以下が違うのが7箇所でした。
>>最大の差は0.002278でした。
>>何が原因なのでしょうか。
>
>Excelの計算に使用した座標値で図形は作図されていますか?
>"座標ファイル"コマンドで線データを書出し、端点の座標を確認してください。

座標値は、JWWデータ上の任意の点を原点としてJWW上で座標測定にて読み取り、それを数値コピーでEXCELに書き込み、計算しました。座標面積計算も原点は一緒です。
こんな面倒なことをしなくても、座標コマンドに「ファイル書込」があったんですね。
JWW上で済ませると題名の問題があるので、ちょっと手間ですが、ファイル書込で一旦EXCELに読み込み、計算して貼り付けるか、書き出したファイルを読み込んでその図形を座標面積計算することにします。

ありがとうございました。

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0@p750188-ipbf610yosida.nagano.ocn.ne.jp>
・ツリー全体表示

Re:原因が解りました
 fujii.A E-MAIL  - 21/4/17(土) 8:47 -
somemさん
通りすがりの後期高齢者さん

参考になりました
座標系登録でミスしてそうです
有難うございました

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0@baidcd0210a.bai.ne.jp>
・ツリー全体表示

Re:座標面積計算結果について
 kojima  - 21/5/18(火) 8:14 -
▼yamaさん:
>(Xn+1 - Xn-1)・Ynを電卓等で計算してみましたが、計算結果が微妙に違います。
>表示されている座標値は小数3桁ですが、その数値を使うと小数第2位で違って来る場合があります。
>座標計測で有効桁を"F"として、少数以下計算桁数を4、5、6桁として計算してみたのですが、結果の小数4位以下が合いません。
>多少違っても、実用上は問題ありませんが、結果が違うのは気持ちのよいものではありません。
>少数以下有効何桁で計算しているのでしょうか。


個人的には、そんな細かいことを気にしなくても? と思いますが。
(以下、修正版)


@REM 座標面積計算表の修正
@echo off
REM #jww
REM #cd
REM #ht10
REM #ht20
REM #ht30
REM #ht40
REM #h1
REM #hc座標面積計算表を範囲選択してください
REM #hp
REM #e
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt > jwc_temp.txt
pause
goto end
#!ruby -Ks
x_array=[]#縦線x座標値の収集用
y_array=[]#横線y座標値の収集用
tatesen=[];yokosen=[]
ch=0
while ARGF.gets
xy=$_.split
if xy[0] =~ /^\d|^-/
xy.collect!{|item|item.to_i}
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]
xy[1],xy[3]=xy[3],xy[1] if xy[1]>xy[3]
end
if xy[0]==xy[2]
x_array<<xy[0]#縦線x座標値の収集
tatesen<<xy
end
if xy[1]==xy[3]
y_array<<xy[1]#横線y座標値の収集
yokosen<<xy
end
end
ch +=1 if xy[0] =~ /^ch/
end
if ch==0
printf("h#文字が選択されていません\n")
exit
end
#x座標値を小さい順にソート
x_array.sort!{|a,b|a<=>b}
#y座標値を大きい順にソート
y_array.sort!{|a,b|b<=>a}
tatesen.sort!{|a,b|a[0]<=>b[0]}
yokosen.sort!{|a,b|b[1]<=>a[1]}
x_array.uniq!#重複する要素の削除
y_array.uniq!#重複する要素の削除
tatesen.uniq!
yokosen.uniq!
#配列(array)に枠(セル)の座標値[左下x,左下y,右上x,右上y]を収集
array=[]
0.upto(y_array.size-2){|i|
array2=[]
0.upto(x_array.size-2){|j|
array2<<[x_array[j],y_array[i+1],x_array[j+1],y_array[i]]
}
array<<array2
}
#表内文字の収集要配列(array2)の初期化
array2=[]
array.each{|item|
array3=[]
item.each{|item2|
x=item2[0]+(item2[2]-item2[0])/2
y=item2[1]+(item2[3]-item2[1])/2
array3<<[x,y,"","ch"]
}
array2<<array3
}
puts "hd"
#配列(array2)に表内文字の収集
mmx=0;mmy=0;tani="";zahyo=[]
open("temp.txt","r"){|f|
while line=f.gets
xy=line.split
if xy[0]=~/^hq/
elsif xy[0] =~ /^c[hv]/
moji=$'.chomp if $_ =~ /\"/
i=0;n=0
array.each{|item|
j=0
item.each{|item2|
if xy[1].to_f>item2[0] && xy[2].to_f>item2[1] && xy[1].to_f<item2[2] && xy[2].to_f<item2[3]
array2[i][j]=[xy[1].to_f,xy[2].to_f,moji,xy[0]]
n = 1
break
end
j += 1
}
break if n==1
i += 1
}
if xy[1].to_f>x_array[-2] && xy[1].to_f<x_array[-1] && xy[2].to_f<y_array[1] && xy[2].to_f>y_array[-1] or moji=~/m\^u2/
if moji=~/[^0-9]*m\^u2/
mmx=xy[1].to_f;mmy=xy[2].to_f;tani=$&
end
zahyo<<[xy[1].to_f,xy[2].to_f] if moji !~/m\^u2/
else
print $_
end
else
print $_
end
end
}
zahyo.sort!{|a,b|b[1]<=>a[1]}
x_m_a=[];y_m_a=[]
1.upto(array2.size-3){|i|
x_m_a<<array2[i][1][2]
y_m_a<<array2[i][2][2]
}
t_s=0
0.upto(y_m_a.size-1){|i|
if i==0
x1=x_m_a[-1].to_f
else
x1=x_m_a[i-1].to_f
end
if i==x_m_a.size-1
x2=x_m_a[0].to_f
else
x2=x_m_a[i+1].to_f
end
s=(x2-x1)*(y_m_a[i].to_f)
ms=sprintf("%.6f",s)
printf("ch %.11f %.11f 1 0 \"%s\n",zahyo[i][0],zahyo[i][1],ms)
t_s += ms.to_f
}
yh=array2[0][0][1]-array2[1][0][1]
printf("ch %.11f %.11f 1 0 \"%.6f\n",zahyo[-2][0],zahyo[-2][1],t_s)
printf("ch %.11f %.11f 1 0 \"%.6f\n",zahyo[-1][0],zahyo[-1][1],t_s/2)
#printf("ch %.11f %.11f 1 0 \"%.2f%s\n",mmx,mmy,t_s/2,tani) if mmx
t_s2=sprintf("%.2f",(t_s/2*100).floor/100.0)
printf("ch %.11f %.11f 1 0 \"%s%s\n",mmx,mmy,t_s2,tani) if mmx
__END__
:end

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko@ai126160166119.39.access-internet.ne.jp>
・ツリー全体表示

Re:座標面積計算結果について
 kojima  - 21/5/23(日) 18:32 -
自前の座標面積計算.batの前半分
(辺長文字と線の離れを指定するようにした)
(読取文字の基点と座標点の許容距離を指定するようにした)
(座標点記入文字と線がなるべく重ならないようにした)
(始点・方向の指示点は、線結合点から外れても動作するようにした)


@REM 座標面積計算表の作成
@echo off
goto %1
REM #jww
REM #cd
REM #hm|面積計算表|座標ファイル|
REM #:1
REM #zc
REM #h1
REM #hc閉鎖図形を範囲選択してください
REM #0原点を指示してください
REM #1座標面積計算の【始点】位置を指示してください
REM #2計算する《方向》の座標点を指示してください
REM #3計算結果記入点を指示してください
REM #c座標点番号の前に付加する文字/_/a
REM #c初期番号指定 無指定:1/_/b
REM #k座標点番号と辺長の記入|1)する(L)|2)しない(R)|/_/c
REM #k座標点文字の読取|1)する(L)|2)しない(R)|/_/d
REM #e
REM #:2
REM #zc
REM #h1
REM #hc閉鎖図形を範囲選択してください
REM #0原点を指示してください
REM #1座標面積計算の【始点】位置を指示してください
REM #2計算する《方向》の座標点を指示してください
REM #c座標点番号の前に付加する文字/_/a
REM #c初期番号指定 無指定:1/_/b
REM #k座標点文字の読取|1)する(L)|2)しない(R)|/_/d
REM #k座標ファイルの種類 |1)XY座標(R)|2)YX座標|/_/e
REM #e
:1
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt %2 %3 %4 %5>jwc_temp.txt
pause
goto end
:2
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt %2 %3 %4 %5>jwc_temp.txt
pause
goto end
#!ruby -Ks
include Math
pre_moji="";no=1
while ARGV.size>1
case argument=ARGV.pop
when /\/a/
pre_moji=argument[2..-1]
when /\/b/
no=argument[2..-1].to_i
when /\/c/
ki=argument[2..-1].to_i
when /\/d/
yo=argument[2..-1].to_i
when /\/e/
f_t=argument[2..-1].to_i
end
end
if ki==1
begin
STDERR.puts("辺長文字と線の離れ(図寸)を入力 無指定:1")
cs=STDIN.gets
STDERR.puts("数値ではありません 無効です") unless cs =~ /^\d+\.*\d*/ or cs=="\n"
end until(cs =~ /^\d+\.*\d*/ or cs=="\n")
end
cs=="\n" ? cl2=1.0 : cl2=cs.to_f
if yo==1
begin
STDERR.puts("線結合点と読取文字との許容離隔(図寸) 無指定:5")
cs=STDIN.gets
STDERR.puts("数値ではありません 無効です") unless cs =~ /^\d+\.*\d*/ or cs=="\n"
cs=="\n" ? cl3=5.0 : cl3=cs.to_f
end until(cs =~ /^\d+\.*\d*/ or cs=="\n")
STDERR.printf("線結合点と%.2fmm以内の基点の文字を読み取ります\n",cl3)
end
#線の配列senから閉鎖図形・連続線・単線を区分けする
def loop_renzoku(sen)
zure=0.1
a=sen.shift
renzoku=[a]
begin
b=sen.find{|item2|(item2[0]-a[2]).abs<zure && (item2[1]-a[3]).abs<zure or (item2[2]-a[2]).abs<zure && (item2[3]-a[3]).abs<zure}
if b
if (renzoku[-1][2]-b[0]).abs<zure && (renzoku[-1][3]-b[1]).abs<zure
a=[b[0],b[1],b[2],b[3],b[4],b[5],b[6],b[7]]
elsif (renzoku[-1][2]-b[2]).abs<zure && (renzoku[-1][3]-b[3]).abs<zure
a=[b[2],b[3],b[0],b[1],b[4],b[5],b[6],b[7]]
end
sen.delete_if{|item2|item2==b}
renzoku<<a
end
end while(b)
if (renzoku[-1][2]-renzoku[0][0]).abs<zure && (renzoku[-1][3]-renzoku[0][1]).abs<zure
return renzoku
else
return nil
end
end
#文字列の長さを返す
def str_l(str,moji_w,moji_d,zusun)
str_a=str.split('')
l=moji_w
1.upto(str_a.size-1){|i|
if str_a[i-1].size==1
l+=moji_d/2
else
l+=moji_d
end
if str_a[i].size==1
l+=moji_w/2
else
l+=moji_w
end
}
return l*zusun
end
#指定の小数点以下桁数にして返す
def keta_f(f,keta)
str=sprintf("%.#{keta}f",f)
return str
end
#メインルーチン
keta=3
by_a=[];hcw=[];hch=[];hcd=[];sen_a=[];ch_a=[]
while ARGF.gets
xy=$_.split
xy[1..-1].each{|item|by_a<<item.to_f} if xy[0]=~/^hs/
zusun=by_a[xy[0][2,1].hex] if xy[0]=~/^lg/
xy.each{|item|hcw<<item.to_f} if xy[0]=~/^hcw/
xy.each{|item|hch<<item.to_f} if xy[0]=~/^hcw/
xy.each{|item|hcd<<item.to_f} if xy[0]=~/^hcd/
hpx1,hpy1=xy[1].to_f,xy[2].to_f if xy[0]=~/^hp1/
hpx2,hpy2=xy[1].to_f,xy[2].to_f if xy[0]=~/^hp2/
hpx,hpy=xy[1].to_f,xy[2].to_f if xy[0]=~/^hp3/
if xy[0]=~/^cn(\d+)/
cn=$_.chomp
if xy.size==1
moji_w=hcw[$1.to_i]
moji_h=hch[$1.to_i]
moji_d=hcd[$1.to_i]
else
moji_w=xy[1].to_f
moji_h=xy[2].to_f
moji_d=xy[3].to_f
end
cl=moji_h/2
end
if xy[0]=~/^\d|^-/
xy.collect!{|item|item.to_f}
sen_a<<xy
end
if xy[0]=~/^ch/
moji=$'.chomp if $_=~/\"/
ch_a<<[xy[1].to_f,xy[2].to_f,moji] if yo==1
end
end
sen_a.sort!{|a,b|
la1=hypot(a[1]-hpy1,a[0]-hpx1)
la2=hypot(a[3]-hpy1,a[2]-hpx1)
la1<la2 ? la=la1 : la=la2
lb1=hypot(b[1]-hpy1,b[0]-hpx1)
lb2=hypot(b[3]-hpy1,b[2]-hpx1)
lb1<lb2 ? lb=lb1 : lb=lb2
la<=>lb
}
sen_a2=sen_a[0,2]
sen_a2.sort!{|a,b|
la1=hypot(a[1]-hpy2,a[0]-hpx2)
la2=hypot(a[3]-hpy2,a[2]-hpx2)
la1<la2 ? la=la1 : la=la2
lb1=hypot(b[1]-hpy2,b[0]-hpx2)
lb2=hypot(b[3]-hpy2,b[2]-hpx2)
lb1<lb2 ? lb=lb1 : lb=lb2
la<=>lb
}
ln=sen_a2[0]
sen_a.delete(ln)
l1=hypot(ln[1]-hpy1,ln[0]-hpx1)
l2=hypot(ln[3]-hpy1,ln[2]-hpx1)
if l2<l1
ln[0],ln[1],ln[2],ln[3]=ln[2],ln[3],ln[0],ln[1]
end
sen_a.unshift(ln)
cl2*=zusun
cl3*=zusun if cl3

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko@ai126172136062.49.access-internet.ne.jp>
・ツリー全体表示

Re:座標面積計算結果について
 kojima  - 21/5/23(日) 18:33 -
#後半分


puts "cc1",cn
zukei=loop_renzoku(sen_a)
unless zukei
printf("h#データが不適当です\n")
exit
end
ten_a=[]
zukei.each{|item|
l=hypot(item[3]-item[1],item[2]-item[0])
arg=atan2(item[3]-item[1],item[2]-item[0])
x=item[0]+l/2*cos(arg)
y=item[1]+l/2*sin(arg)
puts "z3" if ki==1 && hpx !=nil
printf("cs %.11f %.11f %.11f %.11f\"%.3f\n",
x+cl2*cos(arg+PI/2),y+cl2*sin(arg+PI/2),cos(arg),sin(arg),l/1000) if ki==1 && hpx !=nil
ten_a<<[item[0],item[1]]
}
array=[]
0.upto(ten_a.size-1){|i|
x,y=ten_a[i]
moji_a=ch_a.find{|item|(x-item[0]).abs<cl3 && (y-item[1]).abs<cl3}
moji_a != nil ? no2= moji_a[2] : no2="#{pre_moji}#{no}"
array<<[no2,keta_f(x/1000,keta),keta_f(y/1000,keta),nil]
if i==ten_a.size-1
x2,y2=ten_a[0]
else
x2,y2=ten_a[i+1]
end
arg=atan2(y2-y,x2-x)
l=hypot(y2-y,x2-x)
if i==0
x1,y1=ten_a[-1]
else
x1,y1=ten_a[i-1]
end
arg2=atan2(y1-y,x1-x)
x1=x+l*cos(arg2)
y1=y+l*sin(arg2)
l=hypot(y2-y1,x2-x1)
arg2=atan2(y2-y1,x2-x1)
x3=x1+l/2*cos(arg2)
y3=y1+l/2*sin(arg2)
arg=atan2(y3-y,x3-x)
if ki==1
unless moji_a
printf("ch %.11f %.11f %.11f %.11f \"%s\n",
x-cl2*cos(arg),y-cl2*sin(arg),cos(arg+PI/2),sin(arg+PI/2),no2)
end
end
no += 1
}
unless hpx
file="ztemp.txt"
f=open(file,"w")
if f_t==1
f.printf("#座標値\t[XY座標]\n")
array.each{|item|f.printf("%s\t%s\t\"%s\"\n",item[1],item[2],item[0])}
f.printf("%s\t%s\t\n",array[0][1],array[0][2])
else
f.printf("#座標値\t[YX座標]\n")
array.each{|item|f.printf("%s\t%s\t\"%s\"\n",item[2],item[1],item[0])}
f.printf("%s\t%s\t\n",array[0][2],array[0][1])
end
f.close
system("start notepad #{file}")
exit
end
0.upto(array.size-1){|i|
i==0 ? x1=array[-1][1].to_f : x1=array[i-1][1].to_f
i==array.size-1 ? x2=array[0][1].to_f : x2=array[i+1][1].to_f
y=array[i][2].to_f
array[i][3]=keta_f((x2-x1)*y,6)
}
t_s=0
0.upto(array.size-1){|i|
t_s += array[i][-1].to_f
}
array2=["敷地面積","Xn(m)","Yn(m)","(Xn+1-Xn-1)・Yn"]
l1=str_l(array2[0],moji_w,moji_d,zusun)
l2=str_l(array2[1],moji_w,moji_d,zusun)
l3=str_l(array2[2],moji_w,moji_d,zusun)
l4=str_l(array2[3],moji_w,moji_d,zusun)
array.each{|item|
ll2=str_l(item[1],moji_w,moji_d,zusun)
ll3=str_l(item[2],moji_w,moji_d,zusun)
ll4=str_l(item[3],moji_w,moji_d,zusun)
l2 = ll2 if l2<ll2
l3 = ll3 if l3<ll3
l4 = ll4 if l4<ll4
}
ll2=str_l("#{keta_f(t_s.abs/2,2)} m2",moji_w,moji_d,zusun)
l2 = ll2 if l2<ll2
gyo=(moji_h+cl*2)*zusun
x1=hpx
x2=hpx+l1+l2+l3+l4+8*cl*zusun
y=hpy
printf(" %.11f %.11f %.11f %.11f\n",x1,y,x2,y)
y -= gyo
0.upto(array.size+2){|i|
printf(" %.11f %.11f %.11f %.11f\n",x1,y,x2,y)
y -= gyo
}
x=hpx
x_array=[x,x +=l1+2*cl*zusun,x +=l2+2*cl*zusun,x +=l3+2*cl*zusun,x +=l4+2*cl*zusun]
x_array.each{|item|printf(" %.11f %.11f %.11f %.11f\n",item,hpy,item,y+gyo)}
x=hpx+l1/2+zusun
x_array=[l1,l2,l3,l4]
ch_array=["座標点","X^dn(m)","Y^dn(m)","(X^dn^d+^d1-X^dn^d-^d1)・Y^dn"]
y=hpy-gyo/2
puts "cc4"
0.upto(x_array.size-1){|i|
printf("ch %.11f %.11f 1 0 \"%s\n",x,y,ch_array[i])
x+=x_array[i]/2+x_array[i+1]/2+2*cl*zusun if i<x_array.size-1
}
x_array=[hpx+l1/2+cl*zusun,hpx+l1+2*cl*zusun+l2+cl*zusun,hpx+l1+2*cl*zusun+l2+2*cl*zusun+l3+cl*zusun,
hpx+l1+2*cl*zusun+l2+2*cl*zusun+l3+2*cl*zusun+l4+cl*zusun]
y -= gyo
array.each{|item|
0.upto(x_array.size-1){|i|
if i==0
puts "cc4"
else
puts "cc5"
end
printf("ch %.11f %.11f 1 0 \"%s\n",x_array[i],y,item[i])
}
y -= gyo
}
printf("ch %.11f %.11f 1 0 \"倍面積\n",x_array[2],y)
printf("ch %.11f %.11f 1 0 \"%s\n",x_array[3],y,keta_f(t_s.abs,6))
y -= gyo
ts2=sprintf("%.2f",(t_s.abs/2*100).floor/100.0)
ch_array=["敷地面積",ts2+" m^u2","面 積\n",keta_f(t_s.abs/2,6)]
0.upto(x_array.size-1){|i|
if i==0
puts "cc4"
else
puts "cc5"
end
printf("ch %.11f %.11f 1 0 \"%s\n",x_array[i],y,ch_array[i])
}
puts "cc0"
printf("ch %.11f %.11f 1 0 \"座標面積計算表\n",hpx,hpy+cl*zusun)
__END__
:end

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko@ai126172136062.49.access-internet.ne.jp>
・ツリー全体表示

Re:座標面積計算結果について
 R.N  - 21/5/25(火) 22:11 -
▼kojimaさん:

こんばんは、
いつも外変提供して頂き、感謝です。

[Xn(m)]列と[Yn(m)]列の列幅を揃えたくて
278行目(gyo=(moji_h+cl*2)*zusun の前の行)あたりに

l2=l3 if l2<l3
l3=l2 if l2>=l3

を追記してみましたが?

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0@pl76773.ag2001.nttpc.ne.jp>
・ツリー全体表示

Re:座標面積計算結果について
 kojima  - 21/5/26(水) 11:41 -
▼R.Nさん:
>[Xn(m)]列と[Yn(m)]列の列幅を揃えたくて
>278行目(gyo=(moji_h+cl*2)*zusun の前の行)あたりに
>
>l2=l3 if l2<l3
>l3=l2 if l2>=l3
>
>を追記してみましたが?

そのほうが見栄えいいですね。
あと、文字位置も微妙にズレていました。


#後半分
puts "cc1",cn
zukei=loop_renzoku(sen_a)
unless zukei
printf("h#データが不適当です\n")
exit
end
ten_a=[]
zukei.each{|item|
l=hypot(item[3]-item[1],item[2]-item[0])
arg=atan2(item[3]-item[1],item[2]-item[0])
x=item[0]+l/2*cos(arg)
y=item[1]+l/2*sin(arg)
puts "z3" if ki==1 && hpx !=nil
printf("cs %.11f %.11f %.11f %.11f\"%.3f\n",
x+cl2*cos(arg+PI/2),y+cl2*sin(arg+PI/2),cos(arg),sin(arg),l/1000) if ki==1 && hpx !=nil
ten_a<<[item[0],item[1]]
}
array=[]
0.upto(ten_a.size-1){|i|
x,y=ten_a[i]
moji_a=ch_a.find{|item|(x-item[0]).abs<cl3 && (y-item[1]).abs<cl3}
moji_a != nil ? no2= moji_a[2] : no2="#{pre_moji}#{no}"
array<<[no2,keta_f(x/1000,keta),keta_f(y/1000,keta),nil]
if i==ten_a.size-1
x2,y2=ten_a[0]
else
x2,y2=ten_a[i+1]
end
arg=atan2(y2-y,x2-x)
l=hypot(y2-y,x2-x)
if i==0
x1,y1=ten_a[-1]
else
x1,y1=ten_a[i-1]
end
arg2=atan2(y1-y,x1-x)
x1=x+l*cos(arg2)
y1=y+l*sin(arg2)
l=hypot(y2-y1,x2-x1)
arg2=atan2(y2-y1,x2-x1)
x3=x1+l/2*cos(arg2)
y3=y1+l/2*sin(arg2)
arg=atan2(y3-y,x3-x)
if ki==1
unless moji_a
printf("ch %.11f %.11f %.11f %.11f \"%s\n",
x-cl2*cos(arg),y-cl2*sin(arg),cos(arg+PI/2),sin(arg+PI/2),no2)
end
end
no += 1
}
unless hpx
file="ztemp.txt"
f=open(file,"w")
if f_t==1
f.printf("#座標値\t[XY座標]\n")
array.each{|item|f.printf("%s\t%s\t\"%s\"\n",item[1],item[2],item[0])}
f.printf("%s\t%s\t\n",array[0][1],array[0][2])
else
f.printf("#座標値\t[YX座標]\n")
array.each{|item|f.printf("%s\t%s\t\"%s\"\n",item[2],item[1],item[0])}
f.printf("%s\t%s\t\n",array[0][2],array[0][1])
end
f.close
system("start notepad #{file}")
exit
end
0.upto(array.size-1){|i|
i==0 ? x1=array[-1][1].to_f : x1=array[i-1][1].to_f
i==array.size-1 ? x2=array[0][1].to_f : x2=array[i+1][1].to_f
y=array[i][2].to_f
array[i][3]=keta_f((x2-x1)*y,6)
}
t_s=0
0.upto(array.size-1){|i|
t_s += array[i][-1].to_f
}
array2=["敷地面積","Xn(m)","Yn(m)","(Xn+1-Xn-1)・Yn"]
l1=str_l(array2[0],moji_w,moji_d,zusun)
l2=str_l(array2[1],moji_w,moji_d,zusun)
l3=str_l(array2[2],moji_w,moji_d,zusun)
l4=str_l(array2[3],moji_w,moji_d,zusun)
array.each{|item|
ll2=str_l(item[1],moji_w,moji_d,zusun)
ll3=str_l(item[2],moji_w,moji_d,zusun)
ll4=str_l(item[3],moji_w,moji_d,zusun)
l2 = ll2 if l2<ll2
l3 = ll3 if l3<ll3
l4 = ll4 if l4<ll4
}
ll2=str_l("#{keta_f(t_s.abs/2,2)} m2",moji_w,moji_d,zusun)
l2 = ll2 if l2<ll2

l2 = l3 if l2<l3
l3 = l2 if l2>l3

gyo=(moji_h+cl*2)*zusun
x1=hpx
x2=hpx+l1+l2+l3+l4+8*cl*zusun
y=hpy
printf(" %.11f %.11f %.11f %.11f\n",x1,y,x2,y)
y -= gyo
0.upto(array.size+2){|i|
printf(" %.11f %.11f %.11f %.11f\n",x1,y,x2,y)
y -= gyo
}
x=hpx
x_array=[x,x +=l1+2*cl*zusun,x +=l2+2*cl*zusun,x +=l3+2*cl*zusun,x +=l4+2*cl*zusun]
x_array.each{|item|printf(" %.11f %.11f %.11f %.11f\n",item,hpy,item,y+gyo)}
x=hpx+l1/2+cl*zusun
x_array=[l1,l2,l3,l4]
ch_array=["座標点","X^dn(m)","Y^dn(m)","(X^dn^d+^d1-X^dn^d-^d1)・Y^dn"]
y=hpy-gyo/2
puts "cc4"
0.upto(x_array.size-1){|i|
printf("ch %.11f %.11f 1 0 \"%s\n",x,y,ch_array[i])
x+=x_array[i]/2+x_array[i+1]/2+2*cl*zusun if i<x_array.size-1
}
x1=hpx+l1/2+cl*zusun
x2=x1+l1/2+cl*zusun+l2+cl*zusun
x3=x2+cl*zusun+l3+cl*zusun
x4=x3+cl*zusun+l4+cl*zusun
x_array=[x1,x2,x3,x4]
y -= gyo
array.each{|item|
0.upto(x_array.size-1){|i|
if i==0
puts "cc4"
else
puts "cc5"
end
printf("ch %.11f %.11f 1 0 \"%s\n",x_array[i],y,item[i])
}
y -= gyo
}
puts "cc4"
printf("ch %.11f %.11f 1 0 \"倍面積\n",x3-l3/2,y)
puts "cc5"
printf("ch %.11f %.11f 1 0 \"%s\n",x_array[3],y,keta_f(t_s.abs,6))
y -= gyo
ts2=sprintf("%.2f",(t_s.abs/2*100).floor/100.0)
x_array=[x1,x2,x3-l3/2,x4]
ch_array=["敷地面積",ts2+" m^u2","面 積\n",keta_f(t_s.abs/2,6)]
0.upto(x_array.size-1){|i|
if i==0 or i==2
puts "cc4"
else
puts "cc5"
end
printf("ch %.11f %.11f 1 0 \"%s\n",x_array[i],y,ch_array[i])
}
puts "cc0"
printf("ch %.11f %.11f 1 0 \"座標面積計算表\n",hpx,hpy+cl*zusun)
__END__
:end

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko@ai126172093231.49.access-internet.ne.jp>
・ツリー全体表示

Re:座標面積計算結果について
 R.N  - 21/5/26(水) 19:31 -
▼kojimaさん:

こんにちは、
Rubyスクリプトをまだまだ理解できてませんが、
今後とも、めげることなく、よろしくお願いします。

ありがとうございました。

提供して頂いた、スクリプトに対して、ちゃちゃ入れることは簡単かと思いますが、
いざ、作ってみろと言われると、できないのが現実です。

引用なし

パスワード


<Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0@pl76773.ag2001.nttpc.ne.jp>
・ツリー全体表示

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

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