勾配作図
◇バッチファイル
@REM 勾配作図
@echo off
goto %1
REM #jww
REM #cd
REM #hm|勾配(L)|法勾配(R)|標高勾配(3)|標高法勾配(4)|
REM #:1
REM #:2
REM #1ln 斜線を選択してください(L)
REM #99#
REM #hr
REM #e
REM #:3
REM #:4
REM #1ch 標高を選択してください(L)
REM #2ch 標高を選択してください(L)
REM #hr
REM #e
:1
:2
jgawk -vT=%1 -f grade.awk jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
goto end
:3
:4
jgawk -vT=%1 -f grade2.awk jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
goto end
:end
◇AWKスクリプト(斜線用)
##### grade.awk
BEGIN{
dq="\"" #ダブルコーテーション
k=100 #小数点以下桁数2
ntp="1:" #法勾配
per="%" #パーセント
perm="‰" #パーミル
sp=" " #スペース
larw="←" #矢印
rarw="→" #矢印
}
##
/^ /{
#始点座標変換(左→右)
if($1>$3){
xs=$3;ys=$4;xe=$1;ye=$2;dir=-1}
else{xs=$1;ys=$2;xe=$3;ye=$4;dir=1}
if(xs==xe || ys==ye){} #水平/垂直線除外
else{
dx=xe-xs;dy=ye-ys
grd=dy/dx #勾配
n=dx/dy #法勾配
if(grd<0){grd=-1*grd;n=-1*n;arw=-1} #絶対値
else{arw=1}
#単位判定
if(grd>=0.01){grd=grd*100;un=1}
else{grd=grd*1000;un=2}
#四捨五入
grd=int(grd*k+0.5)/k
n=int(n*k+0.5)/k
#文字データ
#勾配
if(un==1){
if(arw<0){grd=dq grd per sp rarw}
else{grd=dq larw sp grd per}}
else{
if(arw<0){grd=dq grd perm sp rarw}
else{grd=dq larw sp grd perm}}
#法勾配
n=dq ntp n
#作図
xc=(xs+xe)/2;yc=(ys+ye)/2 #文字基点
print "cc1" #文字基点(中下)
if(T==1){print "ch",xc,yc,dx,dy,grd} #勾配
if(T==2){print "ch",xc,yc,dx,dy,n}}} #法勾配
◇AWKスクリプト(標高用)
##### grade2.awk
BEGIN{
dq="\"" #ダブルコーテーション
k=100 #小数点以下桁数2
ntp="1:" #法勾配
per="%" #パーセント
perm="‰" #パーミル
sp=" " #スペース
larw="←" #矢印
rarw="→" #矢印
i=1
}
##
/^ch/{
x[i]=$2;y[i]=$3
split($6,chr,"\"");h[i]=chr[2];i=i+1
}
END{
if(h[1]>h[2]){hs=h[1];xs=x[1];ys=y[1]
he=h[2];xe=x[2];ye=y[2]}
else{
hs=h[2];xs=x[2];ys=y[2]
he=h[1];xe=x[1];ye=y[1]}
#距離
dis=sqrt((xe-xs)^2+(ye-ys)^2)
grd=(he-hs)*1000/dis #勾配
n=dis/(he-hs)/1000 #法勾配
if(grd<0){grd=-1*grd;n=-1*n} #絶対値
else{}
if(grd>=0.01){grd=grd*100;un=1}
else{grd=grd*1000;un=2}
#四捨五入
grd=int(grd*k+0.5)/k
n=int(n*k+0.5)/k
#勾配
if(un==1){
if(xs<xe){grd=dq grd per sp rarw}
else if(xs==xe){grd=dq grd per sp rarw}
else if(ys==ye && xs<xe){grd=dq grd per sp rarw}
else if(ys==ye && xs>xe){grd=dq larw sp grd per}
else{print NG;grd=dq larw sp grd per}}
else{
if(xs<xe){grd=dq grd perm sp rarw}
else if(xs==xe){grd=dq grd perm sp rarw}
else if(ys==ye && xs<xe){grd=dq grd perm sp rarw}
else if(ys==ye && xs>xe){grd=dq larw sp grd perm}
else{grd=dq larw sp grd perm}}
#法勾配
n=dq ntp n
#作図
xc=(xs+xe)/2;yc=(ys+ye)/2 #文字基点
if(xs>xe){dx=(xs-xe);dy=(ys-ye)}
else{dx=(xe-xs);dy=(ye-ys)}
print "cc1" #文字基点(中下)
if(T==3){print "ch",xc,yc,dx,dy,grd} #勾配
if(T==4){print "ch",xc,yc,dx,dy,n}} #法勾配
| 固定リンク
« 法勾配 | トップページ | 指定文字変更・削除 »
コメント
somem様
お世話になっております
早速のご対ありがとうございました。
有難く使わせて頂きます
投稿: a.fujii | 2023年12月15日 (金) 14時22分
somem様
お世話になっております
ご相談なのですが
起点(下流)標高 95.00
終点(上流)標高 100.00
一定勾配の水路ですが
平面的にジグザグ水路が変化しています
ジグザグ上での全距離55mです
各ジグザグの変化点での標高と変化点間距離を
測定したいのですが?
可能でしょうか?
よろしくお願いします
投稿: a.fujii | 2024年5月 6日 (月) 11時23分
a.fujiiさん、こんにちは。
>各ジグザグの変化点での標高と変化点間距離を
>測定したいのですが?
平面上の条件が書かれていません。
起点、終点、変化点の座標は、わからないのですか?
エクセルで計算できませんか?
投稿: somem | 2024年5月 6日 (月) 16時07分
somem様
お世話になっております
書きました条件は一例でして
発注者から貰った現場の現況平図面がありまして
例えば山の裾沿いの水路、河川、道路
などが描かれてまして最寄りの起点終点の標高は記載されてますが必要なところの標高がありません
現状は起点と終点の間の変化点(変化距離はまばらです)に実点を打って距離測定→勾配計算→
標高計算しております
私の勝手な思いですが…前回創られた【円弧標高計算】のような寸法値から一括標高計算ができれば…という気持ちです
いつも勝手ばかり申しまして申し訳ありませんが…ご一考頂ければ幸いです
投稿: a.fujii | 2024年5月 7日 (火) 07時44分
a.fujiiさん
外変を要望するのであれば、仕様を明確にしてください。
文章ではなく、必要条件は箇条書きで。
投稿: somem | 2024年5月 8日 (水) 07時24分