| 記事内容:[|]
下記のような外部変形を作成していますが、数式を計算してくれません。 いろいろ試したのですが、値を数値として扱ってないような感じです。 どなたか知恵をを貸してください。 実行する前に、一本の線と4点の標高値を線上付近に書いておく必要がありま す。 標高Z値とZ値の水平距離から、4点交点計算をして,点を書き出そうというもので す。 4GH交点.awk内にある #線、文字書き出しによる取得値のチェック で、いろいろ試したのですが、値を数値として扱ってないような感じなので、X,Y 値が 0を吐き出して、画面中央へ、点を書き出してしまいます。 どなたか知恵をを貸してください。
ーーーーーーーーーーーー4GH交点.awkーーーーーーーーーーーーーーーーーーー ーーー # 【4GH交点】断面指示線上の標高文字4点から交点を書き出す
#断面方向指示線のXY座標取得
(/^hhp5ln/){ getline LX1=substr($1,1)*1; LY1=substr($2,1)*1; LX2=substr($3,1)*1; LY2=substr($4,1)*1 }
#A面標高値のXYZ座標取得 (/^hhp1ch/){ getline AX1=substr($2,1); AY1=$3; AZ1=substr($6,2)*1} (/^hhp2ch/){ getline AX2=$2; AY2=$3; AZ2=substr($6,2)*1}
#B面標高値のXYZ座標取得 (/^hhp3ch/){ getline BX1=$2; BY1=$3; BZ1=substr($6,2)*1} (/^hhp4ch/){ getline BX2=$2; BY2=$3; BZ2=substr($6,2)*1} BIGIN{ #X-Y面による標高値の垂線補正計算
M3=(LY2-LY1)*(LX2-LX1); #交点計算
LAX1=(AY1-LY1+M3*LX1+1/M3*AX1)/(M3+1/M3) ; LAY1=LY1+M3*(LAX1-LX1); LAX2=(AY2-LY1+M3*LX1+1/M3*AY2)/(M3+1/M3) ; LAY2=LY1+M3*(LAX2-LX1); LBX1=(BY1-LY1+M3*LX1+1/M3*BY1)/(M3+1/M3) ; LBY1=LY1+M3*(LBX1-LX1); LBX2=(BY2-LY1+M3*LX1+1/M3*BY1)/(M3+1/M3) ; LBY2=LY1+M3*(LBX2-LX1);
#方向線平面座標計算 LA1=sqrt(((LAX1-LX1)^2+(LAY1-LY1)^2)) #指示線方向累加距離 LA2=sqrt(((LAX2-LX1)^2+(LAY2-LY1)^2)) LB1=sqrt(((LBX1-LX1)^2+(LBY1-LY1)^2)) LB2=sqrt(((LBX2-LX1)^2+(LBY2-LY1)^2))
#XYZの算出 M1=(ZA2-ZA1)/(LA2-LA1); #交点計算 M2=(ZB2-ZB1)/(LB2-LB1); LL=(ZB1-ZA1+M1*LA1-M2*LB1)/(M1-M2)
Z=ZA1+M1*(LL-LA1)
A=atan2(LY2-LY1,LX2-LX1)
X=LX1+LL*COS(A)
Y=LY1+LL*SIN(A) } #XYZの転送
END { {printf"pt %e %e\n",X,Y}
#線、文字書き出しによる取得値のチェック { printf("ch %e %e %e %e \"L=%1.3f\n",LX1,LY1,0,1,lx1) printf("ch %e %e %e %e \"FH=%1.3f\n",LX2,LY2,1,0,m3) } { print "lc1" print "lt1" printf "%e %e %e %e\n",AX1,AY1,AX2,AY2; print "lc2" printf "%e %e %e %e\n",AX2,AY2,BX1,BY1; print "lc1" print "lt2" printf "%e %e %e %e\n",BX1,BY1,BX2,BY2; print "lc4" printf "%e %e %e %e\n",BX2,BY2,AX1,AY1; }
{ printf "%e %e %e %e\n", LX1,LY1,LX2,LY1; printf "%e %e %e %e\n", LX2,LY1,LX2,LY2; printf "%e %e %e %e\n", LX2,LY2,LX1,LY2; printf "%e %e %e %e\n", LX1,LY2,LX1,LY1; } }
ーーーーーーーーーーーーー4GH交点.BATーーーーーーーーーーーーーーーーーー ー @REM 【4標高交点】断面指示線上の標高文字4点から交点を書き出す @echo off goto er%1
REM #jw REM #cd REM #hcあらかじめ標高文字間の結線が必要です REM #hm【4標高交点】|1L)4字指示|2R)工事中|3)工事中|4)工事中|
REM #:1 REM #h0 REM #hc【線交点標高】 REM #g1 REM #1ch 標高文字 A面(1)を指示してください(レイヤ不問) REM #2ch 標高文字 A面(2)を指示してください(レイヤ不問) REM #3ch 標高文字 B面(1)を指示してください(レイヤ不問) REM #4ch 標高文字 B面(2)を指示してください(レイヤ不問) REM #5ln 断面線を指示してください REM #e
REM #:2 REM #h1 REM #hc【線交点標高】標高文字と結線を選択してください(始点マウス右) REM #g1 REM #1ln 断面線を指示してください REM #e
REM #:3 REM #h0 REM #e REM #:4 REM #h0 REM #e
:er1 :er2 jgawk -f 4GH交点.awk jwc_temp.txt > temp.txt del jwc_temp.txt ren temp.txt jwc_temp.txt pause goto END :er3 call qzset /e qzlib goto END :er4 call qzset /e qztool.awk goto END
:END cls call qzset /d qztmp?.tmp
|