« データの圧縮 | トップページ | Axesツール »

2007年10月28日 (日)

円の分割

円を通る直線の交点で2つの円弧に分割する外部変形です。
例)円の一部を破線に変更する前に使用した場合

071028_1

<divide.bat>
--------------------
@REM 円分割
@echo off
REM
REM #jww
REM #cd
REM #1ci 円を指示してください
REM #2ln 線を指示してください
REM #hr
REM #e
REM
jgawk -f divide.awk jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt

<divide.awk>
--------------------
#円分割
BEGIN{pi=atan2(0,-1);hn=1;ax=0}
#
#線種/線色情報の取得
/^#/,/^hhp2/{ck1=substr($1,1,2);if(ck1=="lc"){lcl=$1}}
/^#/,/^hhp2/{ck2=substr($1,1,2);if(ck2=="lt"){ltl=$1}}
/^hhp2/,/^hhp1/{ck3=substr($1,1,2);if(ck3=="lc"){lcc=$1}}
/^hhp2/,/^hhp1/{ck4=substr($1,1,2);if(ck4=="lt"){ltc=$1}}
#円/線の座標取得
NF==4{if($1=="ci"){j=$2;k=$3;r=$4}else{x1=$1;y1=$2;x2=$3;y2=$4}}
END{
#垂直線で分割
if(x1==x2){x3=x1;x4=x1;
e=x1-j;R=r^2-e^2;Y=sqrt(R);y3=Y+k;y4=-Y+k}
#任意角度線で分割
else{p=(y2-y1)/(x2-x1);q=y1-p*x1;
a=p^2+1;b=2*(p*q-j-k*p);c=j^2+q^2-2*k*q+k^2-r^2;
M=b^2-4*a*c;m=sqrt(M);
x3=(-b+m)/2/a;x4=(-b-m)/2/a;
y3=p*x3+q;y4=p*x4+q;}
#
#円弧角の計算
dx1=x4-j;dy1=y4-k;th1=atan2(dy1,dx1);th1=th1*180/pi;
dx2=x3-j;dy2=y3-k;th2=atan2(dy2,dx2);th2=th2*180/pi;
#再作図
print "hd";print lcl;print ltl;
printf "%.15g %.15g %.15g %.15g\n",x1,y1,x2,y2;
print lcc;print ltc;
printf "%s %.15g %.15g %.15g %.15g %.15g %d %d\n","ci",j,k,r,th1,th2,hn,ax;
printf "%s %.15g %.15g %.15g %.15g %.15g %d %d\n","ci",j,k,r,th2,th1,hn,ax}

|

« データの圧縮 | トップページ | Axesツール »

コメント

コメントを書く



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




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/94529/16903342

この記事へのトラックバック一覧です: 円の分割:

« データの圧縮 | トップページ | Axesツール »