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

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

【FreeCADプログラミング】ある点からある方向へ10mm移動した位置を求める方法

今日はベクトル計算の中から、私が一番最初に苦しんだ『点から点への移動計算』について触れていきたいと思います。

なお、机上の鉛筆計算だと掴みにくいかもしれませんので、FreeCADのコンソールを使って検算していきます。

1. 環境

  • FreeCAD 0.18

2. 計算方法

やり方は色々あるかもしれませんが、私の脳ミソで考えると以下のような感じになります。

  1. 現在の座標を求める
  2. 移動先の方向を求める
  3. 現在の座標からの移動量を求める
  4. 現在の座標に移動量を加算する

2.1. 現在の座標を設定する

今回は計算がメインなので、とりあえず(x, y, z) = (10, 20, 30)の位置を移動元の座標としておきます。

2.2. 移動先の方向を設定する

これもとりあえず適当に決めておきます。ひとまず分かりやすく、単位ベクトル(0, 1, 0)としておきます。

2.3. 現在の座標からの移動量を求める

これが今回のおミソです。

移動量を求めるには、手順2で求めたベクトルに移動したい量を掛け算します。

今回はY方向に10mm移動することとすると、『単位ベクトル * 10』で(0, 10, 0)になります。

2.4. 現在の座標に移動量を加算する

ここまでくればもうほぼ終わりです。

手順1の座標に、手順3の座標を加算すれば、移動後の位置となります。

つまり、(x, y, z) = (10 + 0, 20 + 10, 30 + 0) = (10, 30, 30)となります。

画に描くと以下のような感じですね。

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

ベクトルで移動量の計算

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

今回もFreeCADのAPIを使って、計算処理を書いてみました。

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

import FreeCAD

magnitude = 10.0
origin = FreeCAD.Vector(10,20,30) #2.1. 現在の座標を設定する
unitVec = FreeCAD.Vector(0,1,0) #2.2. 移動先の方向を設定する
scaledVec = unitVec.scale(magnitude, magnitude, magnitude) #2.3. 現在の座標からの移動量を求める
movedPos = origin.add(scaledVec)

FreeCAD.Console.PrintMessage(str(movedPos))

 

Vector (10.0, 30.0, 30.0)

とりあえず計算は合っていたようですね。

4. まとめ

  • 単位ベクトルに大きさをかけると、移動量を表すベクトルを算出できる
  • ベクトルに大きさを掛けるときは『scale』を使う
  • ベクトルとベクトルを足し算するときは『add』を使う

5. 最後に

どうですか?計算の幅がグッと広がったと思いませんか?

ベクトル計算の勉強は、最初に公式を見てから始めることが多く、それ故にすぐギブアップしてしまう方が多いです。

無理に頑張ってやめてしまうぐらいなら、いっそのことAPIにまずは身を委ねて、少し分かってきてから、公式の本質を勉強した方が良いです。

私もこのブログを通して、一緒に勉強していきたいと思います。

※注意※

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

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

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

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

www.interested-or-not.com