« ユーザー入力 | トップページ | 数字と文字の和 »

2007年5月19日 (土)

有限構築線

無限線ではありませんが、
水平/垂直/角度に対応した有限の構築線を作図する外変です。
定規とコンパスで作図してた時代は、こんな感じだったかな。

設計に使用する場合は、自己責任でお願いします。

070519_3

作図方向の切換えは、キーボードの 1~9 が使用できます。
水平/垂直は、読取範囲外でLまたは、Rクリックで可能。
作図方法は、コントロールバーに表示されます。

2007.11.23 前回値の取得に問題があった為、一部修正しました。

<eline.bat>
--------------------
@REM 有限構築線
@echo off
goto %1

REM #jww
REM #cd
REM #hm|水平 (L)|垂直 (R)|角度 (3)|2点 (4)|2点間 (5)|平行 (6)|直交 (7)|円 (8)|トリム (9)|

REM #:1
REM #:2
REM #0 基点を指示してください (L/R)
REM #hr
REM #e

REM #:3
REM #0 基点を指示してください (L/R)
REM #c 角度を入力してください |前回値/スキップ|
REM #hr
REM #e

REM #:4
REM #:5
REM #0 始点を指示してください (L/R)
REM #1 終点を指定してください (L/R)
REM #hr
REM #e

REM #:6
REM #:7
REM #0 基点を指示してください (L/R)
REM #1ln 基準線を指定してください (L)
REM #hr
REM #e

REM #:8
REM #0 中心点を指示してください (L/R)
REM #c 半径を入力してください |前回値/スキップ|
REM #hr
REM #e

REM #:9
REM #1ln トリムする線を指示してください(L)
REM #2 トリムする側を指示してください(L)
REM #3 線上の交点を指示してください(R)
REM #hr
REM #e

:1
:2
:4
:5
:6
:7
:9
jgawk  -vN=%1 -f eline.awk jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
goto end

:3
copy jwc_temp.txt+ve.txt
jgawk  -vN=%1 -vVE=%2 -f eline.awk jwc_temp.txt>temp.txt
rename ve.txt vve.txt
jgawk -vVE=%2 'BEGIN{if(VE+0 !=0){print "ve",VE;exit}};NR==1{print $0}' vve.txt>ve.txt
copy temp.txt jwc_temp.txt
del temp.txt
del vve.txt
goto end

:8
copy jwc_temp.txt+vc.txt
jgawk  -vN=%1 -vVC=%2 -f eline.awk jwc_temp.txt>temp.txt
rename vc.txt vvc.txt
jgawk -vVC=%2 'BEGIN{if(VC+0 !=0){print "vc",VC;exit}};NR==1{print $0}' vvc.txt>vc.txt
copy temp.txt jwc_temp.txt
del temp.txt
del vvc.txt
goto end

:end
--------------------

<eline.awk>
--------------------
#有限構築線
BEGIN{pi=atan2(0,-1);ed=10000;h=-1}
#1-----水平線-----
{if(N==1){xb=-ed;yb=0;xe=ed;ye=0}}
#2-----垂直線-----
{if(N==2){xb=0;yb=-ed;xe=0;ye=ed}}
#3-----角度線-----
/^ve/{ve=$2}
{if(VE+0 == 0){VE=ve}}
{if(N==3){an=pi*VE/180;x1=h*cos(an);y1=h*sin(an);
xb=ed*x1;yb=ed*y1;xe=-xb;ye=-yb}}
#4-----2点指示-----
/^hp1/{x1=$2;y1=$3;an=atan2(y1,x1)}
{if(N==4){xb=ed*h*cos(an);yb=ed*h*sin(an);xe=-xb;ye=-yb}}
#5-----2点間線-----
{if(N==5){xb=0;yb=0;xe=x1;ye=y1}}
#6-----平行線-----
NF==4{x1=$1;y1=$2;x2=$3;y2=$4;an=atan2((y2-y1),(x2-x1))}
{if(N==6){xb=ed*h*cos(an);yb=ed*h*sin(an);xe=-xb;ye=-yb}}
#7-----直交線-----
{if(N==7){xb=ed*h*cos(an+pi/2);yb=ed*h*sin(an+pi/2);xe=-xb;ye=-yb}}
#8-----円-----
/^vc/{vc=$2}
{if(VC+0 == 0){VC=vc}}
{if(N==8){xr=0;yr=0;r=VC}}

#9-----トリム-----
/^hp2/{xc=$2}
/^hp3/{xe=$2;ye=$3}
{xs=x1;ys=y1;xt=x2;yt=y2}
{if(xt<=xs){xs=x2;ys=y2;xt=x1;yt=y1}}
{if(N==9 && xc>=xe){xb=xs;yb=ys}}
{if(N==9 && xc<=xe){xb=xt;yb=yt}}
END{
{if(N==8){printf("%s %g %g %.15g\n","ci",xr,yr,r);exit}}
{if(N==9){print "hd"}}
printf("%.15g %.15g %.15g %.15g\n",xb,yb,xe,ye)}

|

« ユーザー入力 | トップページ | 数字と文字の和 »

コメント

コメントを書く



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




トラックバック

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

この記事へのトラックバック一覧です: 有限構築線:

« ユーザー入力 | トップページ | 数字と文字の和 »