タグ

ブックマーク / www.hiramine.com (9)

  • 3つの点を通る平面

    3つの点A、B、Cを通る平面を求めるには? 要素は3次元空間内に存在するものとします。 解説 点Aを通り、ベクトルABとベクトルBCの外積が法線ベクトルな平面が求めるべき平面です。 bool CalcPlane( const CNhPoint3d& pointA, const CNhPoint3d& pointB, const CNhPoint3d& pointC, CNhPlaned& plane ) { CNhVector3d vectorAB = pointB - pointA; CNhVector3d vectorBC = pointC - pointB; CNhVector3d vectorNormal = vectorAB.CalcOuterProduct( vectorBC ); if( 0.0 == vectorNormal.CalcLengthSquared() ) {

  • ステッピングモータを動かす(ステッピングモータ、モータドライバ使用)

    接続例 サンプルコード #define INAPIN (7) #define INBPIN (6) #define VOLUMEPIN (0) // 真理値表 // IN │ φ : φ~ // ──┼──┼── // LOW│ LOW: HIGH // ──┼──┼── // HIGH│HIGH: LOW #define BASESTEPANGLE (1.0) // 基ステップ角度:1ステップで動く角度 void setup() { pinMode(INAPIN, OUTPUT); pinMode(INBPIN, OUTPUT); Serial.begin(9600); } void step_forward( int iRpm ) { // ・1ステップにかけるべき時間は、 //  (基ステップ角度) * (rpmから求まる1度うごくのにかける時間) // ・rpmから求まる1度う

  • DCモータを動かす(モータドライバ使用)(WebIOPi利用)

    接続例 WebIOPiのインストール Raspberry Pi にWebIOPiをインストールしてない場合は、まず、WebIOPiをインストールします。 WebIOPiのインストール スクリプトファイルの作成 「/home/pi/work/webiopi」フォルダに、「motordriver.py」というファイル名で、以下の内容のスクリプトファイルを作成します。 import webiopi GPIO = webiopi.GPIO def MotorDrive( iIn1Pin, iIn2Pin, motor ): if 5 > motor and -5 < motor: GPIO.pwmWrite( iIn1Pin, 0.0 ) GPIO.pwmWrite( iIn2Pin, 0.0 ) elif 0 < motor: GPIO.pwmWrite( iIn1Pin, motor * 0.

  • DCモータを動かす(モータドライバ使用)(WebIOPi利用)

    接続例 WebIOPiのインストール Raspberry Pi にWebIOPiをインストールしてない場合は、まず、WebIOPiをインストールします。 WebIOPiのインストール スクリプトファイルの作成 「/home/pi/work/webiopi」フォルダに、「motordriver.py」というファイル名で、以下の内容のスクリプトファイルを作成します。 import webiopi GPIO = webiopi.GPIO def MotorDrive( iIn1Pin, iIn2Pin, motor ): if 5 > motor and -5 < motor: GPIO.pwmWrite( iIn1Pin, 0.0 ) GPIO.pwmWrite( iIn2Pin, 0.0 ) elif 0 < motor: GPIO.pwmWrite( iIn1Pin, motor * 0.

  • DCモータを動かす(モータドライバ使用)

    接続例 サンプルコード #define IN1PIN (9) #define IN2PIN (10) #define VOLUMEPIN (0) void setup() { pinMode(IN1PIN, OUTPUT); pinMode(IN2PIN, OUTPUT); } int Map( int iIn, int iIn1, int iIn2, int iOut1, int iOut2, boolean bConstrain = false ) { double dValue = (double)(iIn - iIn1) * (iOut2 - iOut1) / (iIn2 - iIn1) + iOut1; int iValue = (0 < dValue) ? (int)(dValue + 0.5) : (int)(dValue - 0.5); if( bConstrain ) {

  • 2線分の交点

    線分AB、CDがあったときに、その交点を求めるには? 要素は2次元空間内に存在するものとします。 解説 線分AB上の任意の点Pは、媒介変数 r を用いて、以下のように表現できます。 P = A + r ( B - A ) ( r は[0~1]の値を取る) ・・・式① 同様に、CD上の任意の点Qも、媒介変数 s を用いて、以下のように表現できます。 Q = C + s ( D - C ) ( s は[0~1]の値を取る) ・・・式② PとQが同一点になる場合の r と s を求めれば、ABとCDの交点は求まったことになります。 というわけで、P = Q を解きます。 P = Q ⇔ A + r ( B - A ) = C + s ( D - C ) X、Yに関する連立方程式にします。 ⇔ Ax + r ( Bx - Ax ) = Cx + s ( Dx - Cx ) Ay + r ( By

  • hiramine.com - グラフィックス プログラミング

    グラフィックス プログラミングに関するメモを書きとめています。 データ構造 ベクトル ( 頂点 ) 平面 球 2次元 2線分の交点 2つのベクトルの成す角 点と直線の距離 点と直線の半空間テスト 三角形の面積 多角形の面積 多角形のループの向き 点の多角形に対する内外判定 閉領域の塗り潰し 3次元 2つのベクトルの成す角 2つの点の垂直2等分平面 2平面の交線 平面と線分の交点 3つの点を通る平面 点と直線の距離 ある軸に対する回転変換行列 参考 参考書籍 書籍名 コメント

  • 平面と線分の交点

    平面A、線分ABがあったときに、その交点を求めるには? 要素は3次元空間内に存在するものとします。 解説 平面Fを a x + b y + c z = d ・・・式① 線分ABを、媒介変数tを用いて、 P = A + t e ・・・式② A = ( Ax, Ay, Az ) e = [ Bx-Ax By-Ay Bz-Az ] = [ Ex Ey Ez ] とします。 式②を成分に分解します。 x = Ax + t Ex y = Ay + t Ey z = Az + t Ez 式①に代入します。 a x + b y + c z = d ⇔a (Ax + t Ex) + b ( Ay + t Ey ) + c ( Az + t Ez ) = d ⇔a Ax + t a Ex + b Ay + t b Ey + c Az + t c Ez = d ⇔t ( a Ex + b Ey + c Ez

  • 点の多角形に対する内外判定

    点が多角形ループの内側にあるか外側にあるかを判定するには? 要素は2次元空間内に存在するものとします。 解説 内外判定の基的な考え方として、「内外を判定したい点から発するレイ(ray:一条の光)を仮定し、レイが多角形の辺を何回横切るかを数え、偶数回横切るとき、点は多角形の外側、奇数回横切るとき、点は多角形の内側と判定することができる」という考え方があります。 ただ、この考え方に従って実装を行うと、レイに対して点接触になる点のある多角形や、レイに対して線接触になる辺のある多角形の場合に判定を誤ってしまう実装になることがあります。 下に示す実装では、レイをXプラス方向に発して、多角形の辺がレイを、「上から下に横切るときには横切り回数を1引き、下から上に横切るときには横切り回数を1足すこととする」ことや、「レイの線上にある点はレイより上にあることとする」ことにより、レイに対して点接触になる点の

  • 1