方位記号作図
線選択の際、基準線の中心よりも北側をマウス指示で、基準線の中心に方位を作成します。
conpass.bat—————————————————————————————————-
@REM 方位記号作図
@REM conpass.bat 2012/07/04 tincan
@echo off
copy jwc_temp.txt temp.txt > nul
jgawk -f compass.awk temp.txt %1 > jwc_temp.txt
goto END
REM
REM #jw
REM #h0
REM #g0
REM #1ln 基準線の北側をマウス指示
REM #e
REM
:END
REM pause
compass.awk—————————————————————————————————-
# 方位記号作図
# compass.awk 2012/07/04 tincan
#
BEGIN{
CONVFMT="%.10f"
r=15 # 方位円の半径(mm)
}
/^h[qk]/{next}
/^hs/{for(i=0;i<=15;i++)s[sprintf("lg%x",i)]=$(i+2);next}
/^h[cn]/{next}
/^hp1ln/{x1=$2;y1=$3;next}
/^lg/{r*=s[$1];next}
/^l[yct]/{next}
/^[c#]/{next}
/^hhp1ln/{
getline
x=($1+$3)/2;y=($2+$4)/2
if(0<=sqrt(($1-x1)^2+($2-y1)^2)-sqrt(($3-x1)^2+($4-y1)^2)){
x1=$3;y1=$4;next
}
x1=$1;y1=$2;next
}
END{
print_C(x,y,atan2(y1-y,x1-x))
}
# ユーザー定義関数
# 方位の書出
function print_C(x,y,a){
b=atan2(0.6,-0.8)
c=atan2(0.6,0.8)
print_ln(x+r*cos(a-b),y+r*sin(a-b),x+r*cos(a),y+r*sin(a))
print_ln(x+r*cos(a+b),y+r*sin(a+b),x+r*cos(a),y+r*sin(a))
print_pt(x,y)
print_ci(x,y,r)
print_ci(x-r*1.6*cos(a),y-r*1.6*sin(a),r,degrees(a-c),degrees(a+c))
printf"h#《終了》方位角=%.3f度\n",degrees(atan2(x2,y2))
}
# 線の書式
function print_ln(x1,y1,x2,y2){
printf" %.10f %.10f %.10f %.10f\n",x1,y1,x2,y2
}
# 点の書式
function print_pt(x,y){
printf"pt %.10f %.10f\n",x,y
}
# 円、円弧の書式
function print_ci(x,y,r,d1,d2){
printf"ci %.10f %.10f %.10f %.10f %.10f\n",x,y,r,d1,d2
}
# ラジアンを角度に変換
function degrees(rad){
return(deg=rad*180/atan2(0,-1))
}
# 角度をラジアンに変換
function radians(deg){
return(rad=deg*atan2(0,-1)/180)
}
----------------------------------------------------------------------------------------------------