LoginSignup
4
6

More than 5 years have passed since last update.

【Python】角度2つと距離から座標を求める

Last updated at Posted at 2016-04-12

概要

親子関係にあるオブジェクトにおいて
親オブジェクトが回転した時に子オブジェクトがどう動くのかとかそういう時に使える。

参考コード

実行環境:Motionbuilder2015

MBでNullで球を描く処理を作ってみました。
本題の処理はgetPosition()の中身だけです。

※ MBを知らない人へ
FB○○と言うのはMB専用のものです。
自分が利用したいソフトや言語に沿ったものに変更してください。

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

from pyfbsdk import *
import math

# 角度2つと距離から座標を求めるメソッド
def getPosition(_angle1, _angle2, _radius):
    x = _radius * math.sin(math.radians(_angle1)) * math.cos(math.radians(_angle2));
    y = _radius * math.sin(math.radians(_angle1)) * math.sin(math.radians(_angle2));
    z = _radius * math.cos(math.radians(_angle1));
    return FBVector3d(x, y, z);

# このfor内を使いたいソフト用に変更してあげれば何でも球体を描いてくれる
## angle1,angle2 に入る値を調整すれば半円を描いたりもできる
## rangeの第3引数のstepを1(もしくは指定なし)で実行すると重たいので注意
parentPos = FBVector3d(50, 50, 50)
for angle1 in range(0, 360, 3):
    for angle2 in range(0, 180, 3):
        mdlNull = FBModelNull("Null_{0}_{1}".format(str(angle1), str(angle2)))
        mdlNull.Show = True
        mdlNull.Scaling = FBVector3d(1, 1, 1)
        mdlNull.Translation = parentPos + getPosition(angle1, angle2, 100.0)

実行するとこんな感じのものが出来上がります。
(これはrange()のstepを1で作りました!)

球体.png

4
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6