今日はベクトル計算の中から、私が一番最初に苦しんだ『点から点への移動計算』について触れていきたいと思います。
なお、机上の鉛筆計算だと掴みにくいかもしれませんので、FreeCADのコンソールを使って検算していきます。
1. 環境
- FreeCAD 0.18
2. 計算方法
やり方は色々あるかもしれませんが、私の脳ミソで考えると以下のような感じになります。
- 現在の座標を求める
- 移動先の方向を求める
- 現在の座標からの移動量を求める
- 現在の座標に移動量を加算する
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)となります。
画に描くと以下のような感じですね。
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プログラミングのトップページに飛びます。
よろしければご参照くださいませ。