Page 791 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼座標面積計算結果について 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 ■日付 : 21/4/15(木) 11:41 -------------------------------------------------------------------------
| (Xn+1 - Xn-1)・Ynを電卓等で計算してみましたが、計算結果が微妙に違います。 表示されている座標値は小数3桁ですが、その数値を使うと小数第2位で違って来る場合があります。 座標計測で有効桁を"F"として、少数以下計算桁数を4、5、6桁として計算してみたのですが、結果の小数4位以下が合いません。 多少違っても、実用上は問題ありませんが、結果が違うのは気持ちのよいものではありません。 少数以下有効何桁で計算しているのでしょうか。 |
| 点数14点を少数以下6桁の座標値でEXCELに取り込み、計算してみたところ、計算結果表示桁全て同一の箇所が7箇所、小数3位以下が違うのが7箇所でした。 最大の差は0.002278でした。 何が原因なのでしょうか。 |
| ▼yamaさん: >点数14点を少数以下6桁の座標値でEXCELに取り込み、計算してみたところ、計算結果表示桁全て同一の箇所が7箇所、小数3位以下が違うのが7箇所でした。 >最大の差は0.002278でした。 >何が原因なのでしょうか。 こんにちは 確かに誤差の範囲内を超えていますね。 https://i.imgur.com/SJfZnsA.jpg |
| yamaさんの件はよくわかりませんが、通りすがりの後期高齢者さんの計算例を試すと jw_cad外部変形でも「Excelによる計算表」と全く同じ数字が出ました。 が、原点位置を[-0.0005 , 0](メートルじゃなくてミリです)オフセットした時に 37.840320 になるというよくわからない現象がありました。 [0.05 , 0](0.05mm)だと座標値に影響が出たり出なかったりしながらも何故か計算結果は同じでした。 |
| こんにちは、原因が解りました、 (卯之助さんの書き込みがヒントになりました) 一旦、座標ファイルに丸め処理をした座標値を保存してJWWへ呼び込めば Excelの計算書と整合性が合います。 ZAHYOU.BATの座標面積計算は表のXY値ではなくJWWの座標値を使用して計算 しているようです。 ※たぶん、JWW上の図形ではなくsimaなどの座標ファイルからの読み込みを 想定しているのではないかと想像します。 |
| 別件ですが… 当方も困っておりまして JWWから座標値を測量ソフトに直接転送すると X=、Y=、のどちらかに1mmの誤差が生じています 逆に測量ソフトから座標値をJWWに直接転送すると正常値です やはりJWWの座標値の精度の問題でしょうか? |
| ▼fujii.Aさん: >やはりJWWの座標値の精度の問題でしょうか? Jw_cadは、浮動小数点倍精度で、有効桁数15桁まで座標値を扱うことができます。 注)小数点以下15桁ではありません。 測量ソフト側の有効桁数をご確認ください。 |
| ▼fujii.Aさん: >別件ですが… >当方も困っておりまして > >JWWから座標値を測量ソフトに直接転送すると >X=、Y=、のどちらかに1mmの誤差が生じています >逆に測量ソフトから座標値をJWWに直接転送すると正常値です >やはりJWWの座標値の精度の問題でしょうか? JWWの座標値の精度の問題では無いと思います。 画像はJWWからSIMAに保存して再度JWWに読み込んで座標計算 したもので特に問題はありませんでした。 (座標計算の座標値は数学座標として計算されています) 但し、座標原点を変更するなどの操作をすると不安定な場合が ありました。(JWWの内部座標データが使用される?) 現時点で座標値と計算結果の整合性を100%得るならば Excelなどで丸め処理された座標値から計算書を作成して JWWに貼り付けた方が正解かもしれません。 http://i.imgur.com/p0U2341.jpg |
| somemさん 通りすがりの後期高齢者さん 参考になりました 座標系登録でミスしてそうです 有難うございました |
| ▼yamaさん: >点数14点を少数以下6桁の座標値でEXCELに取り込み、計算してみたところ、計算結果表示桁全て同一の箇所が7箇所、小数3位以下が違うのが7箇所でした。 >最大の差は0.002278でした。 >何が原因なのでしょうか。 Excelの計算に使用した座標値で図形は作図されていますか? "座標ファイル"コマンドで線データを書出し、端点の座標を確認してください。 |
| ▼somemさん: >▼yamaさん: >>点数14点を少数以下6桁の座標値でEXCELに取り込み、計算してみたところ、計算結果表示桁全て同一の箇所が7箇所、小数3位以下が違うのが7箇所でした。 >>最大の差は0.002278でした。 >>何が原因なのでしょうか。 > >Excelの計算に使用した座標値で図形は作図されていますか? >"座標ファイル"コマンドで線データを書出し、端点の座標を確認してください。 座標値は、JWWデータ上の任意の点を原点としてJWW上で座標測定にて読み取り、それを数値コピーでEXCELに書き込み、計算しました。座標面積計算も原点は一緒です。 こんな面倒なことをしなくても、座標コマンドに「ファイル書込」があったんですね。 JWW上で済ませると題名の問題があるので、ちょっと手間ですが、ファイル書込で一旦EXCELに読み込み、計算して貼り付けるか、書き出したファイルを読み込んでその図形を座標面積計算することにします。 ありがとうございました。 |
| ▼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 |
| 自前の座標面積計算.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 |
| #後半分 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 |
| ▼kojimaさん: こんばんは、 いつも外変提供して頂き、感謝です。 [Xn(m)]列と[Yn(m)]列の列幅を揃えたくて 278行目(gyo=(moji_h+cl*2)*zusun の前の行)あたりに l2=l3 if l2<l3 l3=l2 if l2>=l3 を追記してみましたが? |
| ▼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 |
| ▼kojimaさん: こんにちは、 Rubyスクリプトをまだまだ理解できてませんが、 今後とも、めげることなく、よろしくお願いします。 ありがとうございました。 提供して頂いた、スクリプトに対して、ちゃちゃ入れることは簡単かと思いますが、 いざ、作ってみろと言われると、できないのが現実です。 |