« 円周長測定 | トップページ | 切下げ »

2022年8月20日 (土)

円周長測定(2点間)

2点間の円周長を測定する外部変形です。
指示点は、反時計回りで指定してください。

2022/8/23  切下げ用スプリクト追加
2022/8/24    補正値追加


2_20220820101001

---------- 小数点第4位切下げ
@if(0==1) //円周長測定(2点間) 切下げ
@echo off
REM #jww
REM #cd
REM #1ci 円弧を指定してください
REM #2 反時計周りで指定してください
REM #3#
REM #hr
REM #e
cscript //nologo //e:jscript "%~f0" %*
copy temp.txt jwc_temp.txt
del temp.txt
goto:eof
@end
//ファイルオープン
fso=new ActiveXObject("Scripting.FileSystemObject")
r=fso.OpenTextFile("jwc_temp.txt")
w=fso.CreateTextFile("temp.txt")
//ユーザー設定
ut=1000 //単位: m
unt="m"//単位表記:"m"、表記なし:""
k=3 //小数点第3位
cor=0.0001 //補正値
//初期設定
dq="\"" //ダブルコーテーション
sp=" " //スペース
k=Math.pow(10,k)
/////jwc_temp.txt読込み
while (!r.AtEndOfLine){
line=r.ReadLine()
/////
if(/hq/.test(line)){
}
//端点座標取得
else if(/hp2/.test(line)){
xys=line.split(/\s+/)
xs=Number(xys[1]);ys=Number(xys[2])
}
else if(/hp3/.test(line)){
xye=line.split(/\s+/)
xe=Number(xye[1]);ye=Number(xye[2])
}
//円弧取得
else if(/^ci/.test(line)){
xy=line.split(/\s+/)
xc=Number(xy[1]);yc=Number(xy[2]) //中心座標
rad=Number(xy[3]) //半径
//始角/終角
ths=Math.atan2((ys-yc),(xs-xc))
the=Math.atan2((ye-yc),(xe-xc))
//中心角・法線(中心)傾き
if(ths>=0 && the<=0 || the<=0 && ths<=0 && ths>the //書換え
|| ths>=0 && the>=0 && ths>the){
th=2*Math.PI+the-ths
thc=ths+th/2
} //法線(中心)傾き
else if(ths<0 && the<0 && the>ths){
th=ths-the
thc=ths-th/2
}
else{ th=the-ths
thc=ths+th/2 //法線(中心)傾き
}
//円周長計算
if(th<0){th=-th}else{}
arc=(rad*th+cor)/ut*k //補正値加算
arc=Math.floor(arc)/k //小数点第4位以下切捨て
//ゼロパディング
if(arc<10){
str=String(arc) //数値→文字列変換
num=str.length //文字列長さ
if(num==1){
arc=arc+".000"}
else if(num==3){
arc=arc+"00"}
else if(num==4){
arc=arc+"0"}
else{}
}
else if(arc>=10 && arc<100){
str=String(arc) //数値→文字列変換
num=str.length //文字列長さ
if(num==2){
arc=arc+".000"}
else if(num==4){
arc=arc+"00"}
else if(num==5){
arc=arc+"0"}
else{}
}
else{}
/////
//円周長作図座標
dx=rad*Math.cos(thc)
dy=rad*Math.sin(thc)
xch=xc+dx
ych=yc+dy
if(thc<0 || thc>Math.PI){
cdx=-dy;cdy=dx}
else{cdx=dy;cdy=-dx}
//円周長作図
w.WriteLine("cc1") //文字基点"中下"
arclth=["ch",xch,ych,cdx,cdy,dq+arc+unt]
arclth=arclth.join(sp)
w.WriteLine(arclth) }
//設定情報
else{
w.WriteLine(line)}
} //while
r.Close();w.close()

---------- 四捨五入
@if(0==1) //円周長測定(2点間)
@echo off
REM #jww
REM #cd
REM #1ci 円弧を指定してください
REM #2 反時計回りで指定してください
REM #3#
REM #hr
REM #e
cscript //nologo //e:jscript "%~f0" %*
copy temp.txt jwc_temp.txt
del temp.txt
goto:eof
@end
//ファイルオープン
fso=new ActiveXObject("Scripting.FileSystemObject")
r=fso.OpenTextFile("jwc_temp.txt")
w=fso.CreateTextFile("temp.txt")
//ユーザー設定
ut=1000 //単位: m
unt="m"//単位表記:"m"、表記なし:""
k=3 //小数点第3位
//初期設定
dq="\"" //ダブルコーテーション
sp=" " //スペース
k=Math.pow(10,k)
/////jwc_temp.txt読込み
while (!r.AtEndOfLine){
line=r.ReadLine()
//
if(/hq/.test(line)){}
//端点座標取得
else if(/hp2/.test(line)){
xys=line.split(/\s+/)
xs=Number(xys[1]);ys=Number(xys[2])
}
else if(/hp3/.test(line)){
xye=line.split(/\s+/)
xe=Number(xye[1]);ye=Number(xye[2])
}
//円弧取得
else if(/^ci/.test(line)){
xy=line.split(/\s+/)
xc=Number(xy[1]);yc=Number(xy[2]) //中心座標
rad=Number(xy[3]) //半径
//始角/終角
ths=Math.atan2((ys-yc),(xs-xc))
the=Math.atan2((ye-yc),(xe-xc))
//中心角・法線(中心)傾き
if(ths>=0 && the<=0 || the<=0 && ths<=0 && ths>the
|| ths>=0 && the>=0 && ths>the){
th=2*Math.PI+the-ths
thc=ths+th/2} //法線(中心)傾き
else if(ths<0 && the<0 && the>ths){
th=ths-the
thc=ths-th/2}
else{ th=the-ths
thc=ths+th/2} //法線(中心)傾き
//円周長計算
if(th<0){th=-th}else{}
arc=rad*th/ut
arc=Math.round(arc*k)/k //四捨五入
//円周長作図座標
dx=rad*Math.cos(thc)
dy=rad*Math.sin(thc)
xch=xc+dx
ych=yc+dy
if(thc<0 || thc>Math.PI){
cdx=-dy;cdy=dx}
else{cdx=dy;cdy=-dx}
//円周長作図
w.WriteLine("cc1") //文字基点"中下"
arclth=["ch",xch,ych,cdx,cdy,dq+arc+unt]
arclth=arclth.join(sp)
w.WriteLine(arclth) }
//設定情報
else{
w.WriteLine(line)}
} //while
r.Close();w.close()

|

« 円周長測定 | トップページ | 切下げ »

コメント

somem様
お世話になっております

早速のご対応感謝します
有難く使わさせて頂きます

投稿: a.fujii | 2022年8月20日 (土) 10時29分

somem様
お世話になっております

測定結果を少数点第3位までで少数4位切捨
切の良い数値でも少数3桁まで0表示(3.000m)に
なれば有り難いのですが…

桁つながりの会話で申し訳ありませんが
ご一考頂けませんでしょうか?
よろしくお願いします

投稿: a.fujii | 2022年8月22日 (月) 09時51分

a.fujiiさん

0を追加して桁数をそろえるのは、少し時間がかかるかもしれません。m(__)m

投稿: somem | 2022年8月22日 (月) 18時56分

somem様
お世話になっております。

気長にお待ちしております。
m(__)m

投稿: a.fujii | 2022年8月23日 (火) 05時55分

a.fujiiさん

目途はついたので、それほど、お待たせしないと思います。

投稿: somem | 2022年8月23日 (火) 07時45分

a.fujiiさん

一度アップしましたが、検証中に計算誤差が見つかったので、
再検討することにしました。(^^;

投稿: somem | 2022年8月23日 (火) 20時55分

somem様
お世話になっております。

ご多忙のところ
ご一考頂きありがとうございます

私の業界では
m単位で少数3位まで明示し
最終請求は整数切りと言う
全くもって「お上仕事」でして
勝手ばかり申しますが…
宜しくお願い致します。

投稿: a.fujii | 2022年8月24日 (水) 05時48分

a.fujiiさん、おはようございます。

寸法コマンドの周長と差異のある測定結果が確認されましたが、
エクセルを使った検算で、外変には問題ないことが確認できました。
現在、アップしているバッチファイルをお試しください。

投稿: somem | 2022年8月24日 (水) 08時10分

somem様
お世話になっております

先程5.000m円弧を計測しますと4.999mと
なっております…
このことでしょうか?

投稿: a.fujii | 2022年8月24日 (水) 13時18分

somem様

追伸:
任意長の円弧上に【距離指定点】で10.000m位置で実点を打ち 【円周長測定(2点)】を実行すると10mで配置されます
それ以外は整数の場所で(2.999m,3.999m,4.999m,
10.999m…14.999m)となってるみたいです

ご報告まで。

投稿: a.fujii | 2022年8月24日 (水) 14時28分

a.fujiiさん、こんばんは。

距離指定点の切下げ前の数値は、指定距離未満でした。、
199999・・・・・
299999・・・・・   
切下げなので、外変は、1.999m、2.999mで作図します。

補正値運用が必要なので、スプリクト修正しました。

投稿: somem | 2022年8月24日 (水) 19時43分

somem様
お世話になっております。

完璧です!
有難く使わさせて頂きます。

お忙しいところご対応頂き
本当にありがとうございました。

投稿: a.fujii | 2022年8月25日 (木) 05時54分

somem様
お世話になっております

余りにも便利良すぎて20年近い苦労を
悔いております…

実はもう少し難題がありまして
ご相談させて頂きたいのですが…

円弧上の2点に標高値(文字基点左下)が設定されていて
・2点間の円弧距離と勾配
・2点間の円弧状に設定された任意点の標高値
以上を求めたいのですが如何でしょうか?

ご迷惑と思いますがご一考頂ければ幸いですm(_ _)m

投稿: a.fujii | 2022年8月31日 (水) 09時07分

a.fujiiさん、こんばんは。

円弧は螺旋の一部になると思いますが、
任意地点の標高は、エクセルで計算できると思います。
現状は、どうされているのでしょうか?

投稿: somem | 2022年8月31日 (水) 20時32分

somem様
お世話になっております

イメージは下りながら曲がっていく道路です

現状はカーブ上に20mごと標高がわかってる実点に標高文字を載せてるだけで
あとは【二点間測定】を行い標高差÷円弧距離=勾配(0.52m/20m=0.026)と手計算しております 
次に計算した勾配間の求めたい点(スタートから17.5mの位置)に実点を打ち
(17.5m*0.026=0.455 
既知点標高 750.26m-0.455=749.805m 
下りの場合は減算、上りの場合は加算)

再度手計算しています

投稿: a.fujii | 2022年9月 1日 (木) 06時56分

a.fujiiさん、こんばんは。

円弧だけの区間で、任意点の標高を求める必要があるのですか?
区間によって距離が変わるのでしょうが、
任意点(17.5m)は何によって決まるのですか?

投稿: somem | 2022年9月 1日 (木) 22時17分

somem様
お世話になっております

17.5mは例えですが
設計図面に道路の沿線上の17.5mのところに
宅地の乗入れがあったり…
雨水の会所があったりします…
そこの標高をピンポイントで計算したいのですが
如何でしょうか?

投稿: a.fujii | 2022年9月 2日 (金) 11時37分

a.fujiiさん

今回は、作図済の文字データから、標高を計算することにしました。
バッチファイルの選択部分の記述です。

REM #1 測定点を指示してください
REM #2ch 標高(起点)を指示してください
REM #3ch 標高(終点)を指示してください
REM #4ch 道路長(起点→終点)を指示してください
REM #5ch 道路長(起点→測定点)を指示してください

投稿: somem | 2022年9月 2日 (金) 20時55分

somem様
お世話になっております

私のイメージとおりです~
面倒申します…
よろしくお願いします

投稿: a.fujii | 2022年9月 3日 (土) 08時02分

コメントを書く



(ウェブ上には掲載しません)




« 円周長測定 | トップページ | 切下げ »