« 東京の名湧水 | トップページ | 要素のカウント »

2010年11月23日 (火)

図形の回転

図形を回転する場合、図形の各座標が、中心点を通る水平線と成す角度α、
中心点からの距離r、回転角dθの時、回転後の座標 (x,y)は、
x=r*cos(α+dθ)
y=r*sin(α+dθ)

一行スプリクトで記述するのは難しいので、スプリクトファイルを使います。

線/円/文字を回転移動する外変の例です。

@REM 図形回転
@echo off
REM #jww
REM #cd
REM #h2 範囲内データ・範囲内外に跨る線データを選択
REM #hc 範囲選択から回転中心を指定 右AM0時「確定 基点<< Read >>」
REM #1 基準角を指示する点を指定してください (L)free (R)Read
REM #2 回転角を指示する点を指定してください (L)free (R)Read
REM #hr
REM #e
jgawk -f rotation.awk jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
goto end
#####
線/円/文字以外は、対象外です。
:end

スプリクトファイルは、ファイル名 "rotation.awk" で保存してください。

##### 図形回転
# 対象図形は、線/円/文字
# 文字の方向は水平、基点のみ回転
#####
BEGIN{print "hd";OFMT="%.15g"}
##
## 基準角を取得
/^hp1/{ths=atan2($3,$2)}
## 終了角/回転角を取得
/^hp2/{the=atan2($3,$2);dth=the-ths}
##
/^#/,NF==0{
    ## 線   
    if(NF==4 && $1!="ci"){
        rs=sqrt($1^2+$2^2);angs=atan2($2,$1)
        $1=rotx(rs,angs,dth);$2=roty(rs,angs,dth)
        re=sqrt($3^2+$4^2);ange=atan2($4,$3)
        $3=rotx(re,ange,dth);$4=roty(re,ange,dth)
        print $1,$2,$3,$4;next}
    ## 円(円弧は除く)/文字
    # ||は、 論理和(A or B)
    if(NF==4 && $1=="ci" || $1=="ch"){
        rc=sqrt($2^2+$3^2)
        angs=atan2($3,$2)
        $2=rotx(rc,angs,dth);$3=roty(rc,angs,dth)
        print $1,$2,$3,$4,$5,$6}
    else{print $0}
    }
#####
## ユーザー定義関数
function rotx(r,afa,bta){return r*cos(afa+bta)}
function roty(r,afa,bta){return r*sin(afa+bta)}

◇ユーザー定義関数
function  関数名(引数){return 式}で記述します。

|

« 東京の名湧水 | トップページ | 要素のカウント »

コメント

コメントを書く



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




トラックバック

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

この記事へのトラックバック一覧です: 図形の回転:

« 東京の名湧水 | トップページ | 要素のカウント »