ブログ記事127件
三角形の内接円の中心を求める関数です。外接円の中心は、3点を通る円の中心で求められます。角度二等分線の交点を得るだけの簡単なお仕事です。functionInscribedCircleCntrV(pt1,pt2,pt3:vector;varcnt:vector):boolean;{三角形の内接円の中心を求める(vector型)}varv1,v2:vector;beginv1:=VecVec2MidAzimuthVecV(pt2-pt1,pt3-
1本の直線に接し2点を通る円の中心を求める関数です。図のように点間に垂直二等分線(vc)を引いたら一つ前の投稿のLLP2ArcCenter関数と同じなのですが、気付かないで同じようなソースコードを書いてしまいました。functionPPL2ArcCenterV(pt1,pt2,pL1,pL2:vector;varcnt1,cnt2:vector):integer;{2点と接線から円の中心を求める(返り値は中心の数)(vector型)}label999;var
1点からの2つのベクトルに接して別の1点を通る円の中心を求める関数です。2次方程式を解いて円の中心を求めることも出来るはずですが、別の方法でやりました。まずv1とv2の角度二等分線(vc)上の任意の位置に、v1とv2に接する円を作ります。次にptとpvを通る直線(v)と円の2つの交点を求めます。最後にpvから交点までの距離とptからpvまでの距離で比例計算をして円の中心を求めます。functionPVVP2ArcCenterV(kp,v1,v2,pt:vector;
2本の直線と半径から円の中心を求めると、下のように4つの円が出来ます。ですから最初に、一点からの2つのベクトルに接する円の中心を求める関数を書きます。functionPVVR2ArcCenterV(kp,v1,v2:vector;rad:real;varcnt:vector):boolean;{一点からの2つのベクトルに接する円の中心を求める(vector型)}label999;varang,dist,prec:real;v:vector;r
始点と終点と半径から円孤の中心を求める関数です。中心の数は0個、1個、2個の3パターンあるので、それを返り値とします。functionSER2ArcCenterV(pt1,pt2:vector;rad:real;varcnt1,cnt2:vector):integer;{始点と終点と半径から円の中心を求める(返り値は中心の数)(vector型)}varang,dia,dist,h,prec:real;result:integer;pm,v:v
今書いている関数は、座標パラメータをそれぞれVector型、point型、real型で表す3種類の関数で1セットとなります。基本的にはvector型で書いて、他はそれを呼び出す形になります。書き進めるに連れてvector型だけで十分だという思いは強くなっていきますが、関数を呼び出すだけで難しくは無いので続けようと思います。ただしvector型以外は検証していません。区別のために、関数名の末尾にはV、P、Rの文字を付けています。ここで関数名の命名基準を書いておきます。S:円弧の始点
(※2022/09/29に改題しました。)円(円弧)の中心を求める関数を書いていきます。関数の返り値は円の中心の有無です。円周上の3点から円の中心を求める関数です。垂直二等分線を求める手続きを使って書き直しました。functionSME2ArcCenterV(st,mid,ed:vector;varcnt:vector):boolean;{3点を通る円の中心を求める(vector型)}label999;varprec:real;p11,p12,
ベクトル間の水平面の角度差を返す関数です。返ってくる角度の範囲は-180°〜+180°です。AngBVec関数との違いは水平面の角度であることと、角度が符号を持つことです。functionAzimuthByVecs(v1,v2:vector):real;{2つのベクトルの方位差を返す(ベクトル1が基準)}beginAzimuthByVecs:=Vec2Azimuth(RotVec(v2,Vec2Ang(v1)));end;範囲外のパラメータがあったことをログに書き
いくつかサブルーチンを追加します。後で円の中心を求めるのに使うかも知れません。最初は、2つのベクトルの中間の角度の単位ベクトルを返す関数です。これで角の二等分線を得られます。functionVecVec2MidAzimuthVec(v1,v2:vector):vector;{2つのベクトルの中間の方位角の単位ベクトルを返す}varang:real;beginang:=Vec2Azimuth(v1);v2:=RotVec(v2,-ang);VecVec2M
基準点、サイズ、角度を指定して図形を生成する関数です。関数は前回と同じく四角形、角丸四角形、楕円、四分円の4種類です。Ver.12で回転した四角形というオブジェクトが新しく出来たので、それを描く組込み手続きも追加されています。しかしこれは当然Ver.11.5では使えないし、作図の基点が四角形の左下に決め打ちされています。ですからVer.11.5でも使えるような関数を作ってみました。本家の手続きとは違って、生成する図形は見た目は回転した四角形ですがオブジェクトの種類は『多角形』です。
領域四角形(BoundBox)の対角線の座標を指定して図形を描く関数です。生成した図形のハンドルを返します。関数の種類は四角形、角丸四角形、楕円、四分円です。BoundBoxはマニュアルでは左上と右下の座標を指定することになっていますが、Ver.11.5とvw2015では対角線の座標であれば(右下、左上)、(左上、右下)、(右下、左上)でも大丈夫です。それ以外のバージョンでは確認していませんが、(右上、左下)にする必要があるときは、SwapByOrderR(x1,x2);Sw
生成した図形のハンドルを返す描画関数です。図形が生成されないときはNilを返します。その判定は、実際に描画して図形の生成を確認するのではなく、エラーになる条件を満たすパラメータのときにNilを返しています。例えば図形の長さ、幅、高さ、円弧角がゼロの図形は生成されないのでNilを返します。座標値の型により、関数名の末尾にR、P、Vの文字を付けています。まずは指定した位置に図形を生成する関数です。基準点、円、シンボルを指定した位置に生成します。(*指定した位置に図形を配置する関数です。
今朝投稿したソースコードは、コンパイルすると何個かエラーが出たので後で修正しました。スマホで書いてると編集に時間がかかるので修正忘れがあったりします。『描画用計算(4):VS-基本ライブラリ(26)』直線と円の交点を求める手続きはvw2014以降でしか使えません。代わりに使えるのはLineEllipseIntersectですが、OvalじゃなくてElli…ameblo.jp描画用計算は今回で一旦終了です。何か思い付いたらまた再開するかも知れませんが。最後は『3点を通る円の中心
直線と円の交点を求める手続きはvw2014以降でしか使えません。代わりに使えるのはLineEllipseIntersectですが、OvalじゃなくてEllipseかい、って突っ込みたくなります。procedureLineEllipseIntersect(pL1,pL2:point;{直線の端点}pR1,pR2:point;{楕円の左上と右下}varpt1:point;{交点1}varlegal1:boolean;{交点1の有無
直線と直線の交点計算は円の中心を求めるときなどに必要です。組込み手続きLineLineIntersectionはパラメータがpoint型となっています。これは、Ver.9でpoint型が出来て以降に作られたサブルーチンだからでしょう。座標値が何個もダラダラと続くと目眩がするので、これは良い判断です。元の手続きの宣言部です。procedureLineLineIntersection(pt11,pt12:point;{直線1の座標}pt21,pt22:point;{
描画計算では座標の回転を頻繁に行います。VectorScriptの組込みサブルーチンにはオブジェクトを回転する手続きはありますが、実体のない座標値を回転するものはありません。座標の回転のやり方は、回転の中心となる点p0から処理したい点p1までのベクトルを回転することになります。1.ベクトルを得るv:=p1-p0;2.ベクトルを回転v:=RotVec(v);3.座標に戻すp1:=p0+v;ということなので、まずはベクトルを回転する関数です。(*
今回からしばらくは描画用の計算サブルーチンを書いて行きます。角度でソートする場合など、角度を決まった範囲内に収めたい場合があります。例えば0°〜360°や-180°〜+180°に収まるようにです。具体的には角度が下限より小さければ360を足し、上限以上なら360を引きます。(*--------角度を指定した範囲に収める--------*)functionNormalAngle360(ang,minAng:real):real;{角度を指定した範囲内の角度にし
四分円を描く手続きがあったと思ったのですが、記憶違いみたいです。おまけで作りました。種類は0〜90度、90〜180度、180〜270度、270〜360度の4種類あります。これにそれぞれ0〜3の番号を振りました。開始角/90と覚えてください。procedureQuad(x1,y1,x2,y2:real;tp:integer);{四分円を描く(real型)四分円のタイプ=0:0~90度、1:90~180度、2:180~270度、3:270~360度}
ポリゴン、ポリラインの生成時に頂点/制御点を追加する手続きです。BeginPoly;〜EndPoly;の間で使います。全ての頂点をAddPointで追加した図形はポリゴンに、それ以外も混じるとポリラインになります。(*ーーーーーーー以下の手続きは多角形、曲線の生成時に頂点/制御点を追加します。ーーーーーーー*)procedureAddPointP(pt:point);{頂点を追加する(point型)}beginAddPoint(pt.x,pt.y);end;
RectangleN手続きのpoint型とvector型版を追加しました。『point型とvector型での描画(1):VS-基本ライブラリ(17)』組込み手続きのXY座標をpoint型とVector型で使うためのラップ手続きです。元の手続き名の末尾にPかVを付けて手続き名としています。vector…ameblo.jp
四角形、角丸四角形、楕円、円弧(楕円)をpoint型とvector型で描く手続きです。これらは図形の境界四角形の対角線を指定して図形を描きます。(*ーーーーーーー以下の手続きは境界四角形の対角線の両端を指定して図形を描きます。ーーーーーーー*)procedureRectP(pt1,pt2:point);{四角形を描く(point型)}beginRect(pt1.x,pt1.y,pt2.x,pt2.y);end;procedureRectV(pt1,
今回はペンの移動と、ペンの位置から描画を行う手続きです。ペンの位置が図形の始点、座標または相対距離で指定された位置が終点です。描画後はペンの位置が終点に移動します。図形の種類は直線と壁です。文字もペン位置から書き始めますが、終点の指定はしないので今回は関係ありません。(*ーーーーーーー以下の手続きはペンを移動します。ーーーーーーー*)procedureMoveToP(pt:point);{ペンを移動する(point型)}beginMoveTo(pt.x,pt.y);
組込み手続きのXY座標をpoint型とVector型で使うためのラップ手続きです。元の手続き名の末尾にPかVを付けて手続き名としています。vector型のものはpoint3D型でも使えます。まずは指定した座標に2D図形を配置する手続きです。図形の種類は2D基準点、シンボル、プラグインオブジェクト(PIO)です。(*ーーーーーーー以下の手続きは指定した座標に図形を配置します。ーーーーーーー*)procedureLocusP(pt:point);{2D基準点を配置する
シフトJISコードについて調べて書き足しました。『コメント文について:VectorScript(9)』前回のブログをアップした後、Ver.11.5で動くようになったインクルード・ファイルを2015のほうにコピーして試したところ、またコンパイル・エラーが起きて…ameblo.jp
CalcI手続きのdivとmodの計算で、実数型では演算子divとmodは使えないので他の方法に修正しました。『Calc手続き(1):VS-基本ライブラリ(8)』Calc手続きは数値型の変数に対して様々な演算を行います。変数の種類はinteger型、longint型、real型の3つです。Calc(a,'+',…ameblo.jpCalcR手続きのroundupの計算で、AbsをAbsoluteと間違って書いていたので修正しました。『Calc手続き(2):VS-基
前回のブログをアップした後、Ver.11.5で動くようになったインクルード・ファイルを2015のほうにコピーして試したところ、またコンパイル・エラーが起きてしまいました。やはり原因はコメント文らしいのです。'図形'が怪しいのでそのコメント文を(*と*)で囲ってやるとエラーが消えます。要するにシフトJISコードの2バイト目が'}'の文字コードと同じになっているためにコメント文が途中で切れてしまい、コメントの後半が間違ったソースコードと解釈されてエラーになるのでしょう。'{'
2015デモ版で動いているインクルード・ファイルをVer.11.5に持って行くと何故か動かない。エラーメッセージを見ても全然問題無い箇所を示してたりして意味が分からない。一箇所だけ、Ver.11.5のサポートしてない新しいサブルーチンを使っていたところがありましたが、それ以外はソースコードに問題は無さそうです。少し前に書いたようにコメント文を修正しても治りません。『コメント文についての覚え書き:VectorScript(4)』最近はVer.2015デモ版でばかり動かしていたから無頓着
【障害者クリエイターズバンク求人紹介】株式会社トーマネ事業内容:販売促進業務の総合的な企画・実施、店舗設計施工、マネキン人形・ディスプレイ器具の製造、販売、レンタル、内装仕上工事業・建築工事業1934年創設の伝統ある会社業務内容:VMDデザイナー当社は今年で創業88年を迎える、マネキン人形、什器の製作および内装施工を含んだ商空間プロデュースをおこなっている企業です。旅行やスポーツクラブの割引、インフルエンザ予防接種補助金、奨学金制度など福利厚生も充実しています。VMDデザイ
複数の変数に値を返すVectorScriptの標準手続きには、R,G,Bの値を返すGetFillForeやGetPEnForeなどの一連の手続きがあります。前回の手続きはこれらにヒントを得たところはあります。『構造体の各要素をまとめて取出す:VS-基本ライブラリ(15)』ベクトルから長さと角度を取出すときは、n:=Norm(v);a:=Vec2Ang(a);のように2つの命令文が必要です。X,Y,Zの各成分…ameblo.jp色の値を得ようとするとR,
ベクトルから長さと角度を取出すときは、n:=Norm(v);a:=Vec2Ang(a);のように2つの命令文が必要です。X,Y,Zの各成分を取出すには3つの命令文が必要です。これらをひとつにまとめて行う関数と手続きを作ってみました。タイトルから外れますが、先ずはベクトルの長さや角度を返す関数です。Z成分がゼロでない場合はNorm関数とVec2Ang関数は思った通りの値を返しません。そこでZ成分を無視して水平角度や水平長さを返す関数を作りました。垂直面の角度を返す関数も無