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

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

【FreeCADプログラミング】投影距離の計算

本日は投影位置の計算について触れてみたいと思います。

CAD上での計算を行う際、座標系に平行・直交した位置の計算は単なる足し算・引き算でできますが、ひとたび傾くと、簡単には計算できなくなります。

そこで役に立つのが『投影距離の計算』です。

1. 環境

  • FreeCAD 0.18

2. 投影距離とは?

投影距離は『ある方向成分の距離』を表しています。
(厳密な言い回しはちょっと違うかもしれません)

例えば下図のように、XY軸に対して傾いた線(黒い線)があったとします。

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

X,Yの軸に対して斜めに傾いた線とその成分

この時、X方向の成分だけを抽出したとしましょう。これが投影距離です。

もちろんY方向の成分だけを抽出しても投影距離です。

要は自分が指定した方向の距離だけを求めたいときに使います

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

ありがたいことに投影距離計算用のAPIはFreeCADに用意されています。
(というよりも、自前でメソッドを作ることになったらどういう処理にするか、まだ頭に浮かんでいません)

# -*- coding: utf-8 -*-
import FreeCAD
v1 = FreeCAD.Vector(8,9,0)
v2 = FreeCAD.Vector(5,5,0)
v3 = FreeCAD.Vector(0,1,0)
distance = v1.distanceToPlane(v2,v3)
FreeCAD.Console.PrintMessage(str(distance))
4.0

ちなみにこのdistanceToPlaneというメソッド、本家『freecadweb.org』様の英語リファレンスがなかなか理解しづらく、下記のような文言が書いてありました。

distanceToPlane(Vector1,Vector2)

Description: the distance between the vector and a plane defined by a point and a normal.

Returns: float

出典:Vector API - FreeCAD Documentation

Google先生の翻訳機能をフル活用したところ、和訳はこんな感じになりました。

「ベクトルと、点と法線によって定義される平面との間の距離。」

 

なんとなく分かるような、分からないような。

一応色々試してみた結果では、第1・第2引数は下記のような入力だと想定しています。

  • 第1引数: 投影距離を測るための2つ目の位置
    (Vectorと書いてありますが、3次元の座標値を入れる感覚で良いと思います)
  • 第2引数: 投影距離を測る方向

なお、図に表すと下図赤枠の距離を取得しています。

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

ベクトル(0,1,0)の方向成分の距離だけ抽出している

4. distanceToPlaneは割と強力

distanceToPlaneは、要素が座標系のX,Y,Z軸に正対していない状況での距離計算に威力を発揮します。

例えば下図のように、2点と計りたい方向は分かる状況においては、本APIがあれば難なく計算できます。

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

軸に平行・直交していない投影方向の計算

5. まとめ

  • 投影距離を測るときはdistanceToPlaneを使う
  • distanceToPlaneは座標軸に正対していない状況での投影計算に威力を発揮する

6. 最後に

今回はAPIリファレンスの読解が難しかったですが、良い勉強になりました。

皆さんも慣れてきたら少しずつでも、リファレンスを読むようにしてみてください。

※注意※

実は管理人は数学が相当苦手なため、ロジック的に間違っている箇所があるかもしれません。もし何かお気づきの点がありましたら、コメントを頂けると助かります。

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

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

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

www.interested-or-not.com