興味があろうがなかろうが。

なるべく役に立つ、とがった内容を記していきたいと思います。

【FreeCADプログラミング】ベクトルの直交判定

本日はベクトルの直交判定をお勉強していきたいと思います。

直交判定といういかにも難しそうな名前が付いていますが、基本的には先日の平行判定とやることはあまり変わりません。

1. 環境

今回もFreeCADのAPIを使っていきます。

  • FreeCAD 0.18

2. ベクトルの直交判定とは?

ベクトルの直交というのはベクトル同士が直角で交わっているかを指しており、コレの判定を行うということです。

f:id:appli-get:20191007203648j:plain

直交判定のイメージ

3次元で書くと分かりにくいので、2次元で書いてみました。

3. プログラムを書いてみよう

平行判定の時と同じく、FreeCADにベクトルの直交判定用APIがなかったため、今回も自作して、確認していきたいと思います。

www.interested-or-not.com

# -*- coding: utf-8 -*-

import FreeCAD

def IsPerpendicular(vector1vector2):
    tolerance = 0.0001
    dotProduct = vector1.dot(vector2)
    if(abs(dotProduct) <= tolerance):
        return True
    else:
        return False

v1 = FreeCAD.Vector(1,0,0)
v2 = FreeCAD.Vector(0,1,0)

isPara = IsPerpendicular(v1, v2)
if(isPara == True):
    FreeCAD.Console.PrintMessage("直交しています。\n")
else:
    FreeCAD.Console.PrintMessage("直交していません。\n")

 

直交しています。

4. 補足

4.1 上記のサンプルコードはもう一段改造すると良い

上で書いたサンプルコードは、単位ベクトルでのみ使うことができ、大きさを持ったベクトルでは使用することができません。

そのため、IsPerpendicularメソッドの最初に引数で与えられた2ベクトルを単位化するコードを入れると、さらに使いやすくなります。

www.interested-or-not.com

5. まとめ

  • ベクトルの直交判定は、2つのベクトルが90°でクロスしているかを判定している
  • ベクトルの直交判定は内積で求められる
  • FreeCADのAPIを使わなくても自作で作れるものはある

6. 最後に

直交判定自体は、平行判定に比べると使う機会が少ないですが、複数のベクトルが直角になっていることを強いられるときに役に立ちます。

例えば、3次元の座標系を作成する際、3つの軸(ベクトル)は必ずそれぞれ直交していなければなりません。

平行判定と一緒におぼえておきましょう。

更なる情報をお探しの方は!

下記のリンクから、FreeCADプログラミングのトップページに飛びます。

よろしければご参照くださいませ。

www.interested-or-not.com