円ソリッド
円/円弧にソリッド図形を作図するスプリクトです。
少し複雑な外部変形を作成する場合は、if 文を多用することになるので、
今回はその一例です。
スプリクト内に解説を記述していますが、awkファイルとしても利用できます。
##### 初期設定
BEGIN{
# 円周率π、
pi=atan2(0,-1)
# print文の数値制御
OFMT="%.15g"
}
###### 行処理
### 先頭フィールド"ci"にパターンマッチング
/^ci/{
### フィールド数(円4、円弧8)によって条件分岐
# 円データを円ソリッドデータに変換
if(NF==4){
$1="sc";$5=1;$6=0;$7=0;$8=2*pi;$9=100
print $1,$2,$3,$4,$5,$6,$7,$8,$9
}
# 円弧データを弓形ソリッドデータに変換
if(NF==8){
### 楕円/楕円弧/軸角のあるデータを除外
# 対象外図形があると、画面左にメッセージを表示して終了
if($7!=1 || $8!=0){print "he対象外図形があります";exit}
#
### 終了角が開始角より大きい場合
if($6>$5){
# 開始角が180°以上を条件分岐
# 角度単位をラジアンに変換
if($5<180){$7=$5*pi/180}
if($5>=180){$7=($5-360)*pi/180}
$8=($6-$5)*pi/180
}
### 終了角が開始角より小さい場合
if($6<$5){
if($5<180){$7=$5*pi/180}
if($5>=180){$7=($5-360)*pi/180}
$8=(360+$6-$5)*pi/180
}
### 円ソリッド/扁平率/傾角/円フラグ(弓形)を指定
$1="sc";$5=1;$6=0;$9=5
}
### 行毎に変換したデータを出力
print $1,$2,$3,$4,$5,$6,$7,$8,$9
}
##########
# <円データ>
# ci %lg %lg %lg ( x y r )
# <円弧(楕円/楕円弧)データ>
# ci %lg %lg %lg %lg %lg %lg %lg ( x y r 始角 終角 偏平率 軸角 )
# <円ソリッドデータ>
# sc %lg %lg %lg %lg %lg %lg %lg %lg ( x y r 偏平率 傾角 始角 円弧角 円フラグ)
# 角度の単位はラジアン、円フラグは円が「100」、弓形が「5」、扇形が「0」
| 固定リンク | コメント (0) | トラックバック (0)
最近のコメント