[過去ログ] 【ゲームエンジン】Unityなんでも質問スレpart1 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
539: 名前は開発中のものです。 [] 2020/07/20(月) 16:02:09.57 ID:hNMBd3gW(1/3) AAS
>>521コンピュータが数学の関数をどのように計算して値を返しているのか、考えたこともありませんでした。
調べてみたところ、三角関数についてはマクローリン展開された式を第何項かまで計算しているようです。
(三角関数のマクローリン展開は 外部リンク:ja.wikipedia.org )
また、三角関数の引数は時間ではなく角度です。
時間を引数にすると、時間の経過によって返り値が変化するというだけです。
544(2): 名前は開発中のものです。 [] 2020/07/20(月) 17:58:01.54 ID:hNMBd3gW(2/3) AAS
>>421421(1): 名前は開発中のものです。 [] 2020/07/15(水) 14:34:23.38 ID:WYOW0SRX(1/4) AAS
クォータニオンから角度を求める方法について質問したいです。
クォータニオンの各変数にはcos(θ/2)やsin(θ/2)が現れますが、transform.rotation.ToAngleAxisなどでクォータニオンからθを求める際、θ=360°+αとθ=360°-αの判別が付きませんよね?
例えば、370°回転させたとき、返り値として370(=360+10)または10が欲しいのですが、実際には350(=360-10)が返されます。
物体を360°以上回転させる場合、どうやってその角度を取得すればいいのでしょうか?
よろしくお願いします。
です。解決しましたので報告します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BoxMove : MonoBehaviour
{
//ハンドルの GameObject を指定させる
public GameObject Handle;
//ハンドルの角度と回転軸
private float HandleAngle;
private Vector3 HandleAxis;
void Update()
{
//ハンドルの角度と回転軸を取得
Handle.transform.localRotation.ToAngleAxis(out HandleAngle, out HandleAxis);
//偶数周目では回転軸の向きが反転するので、それを検知して角度を修正する
if(HandleAxis.x < 0)
{
HandleAngle = 360 - HandleAngle;
}
//ハンドルの角度に応じて箱を移動させる
this.transform.localPosition = new Vector3(0, 0, HandleAngle);
}
}
545: 名前は開発中のものです。 [] 2020/07/20(月) 17:58:30.46 ID:hNMBd3gW(3/3) AAS
>>544 続き
Debug.Log で HandleAngle と HandleAxis を同時に表示させたら気付きました。
ハンドルを回転させていくと、360°を越えるときに
...
HandleAngle = 358, HandleAxis = (1, 0, 0)
HandleAngle = 359, HandleAxis = (1, 0, 0)
HandleAngle = 359, HandleAxis = (-1, 0, 0)
HandleAngle = 358, HandleAxis = (-1, 0, 0)
...
のように、HandleAxis の向きが反転していました。なので、HandleAxis が反転したとき(HandleAxis.x が負のとき)は逆回転になっていると解釈して、回転角度は360から HandleAngle を引いたものとしました。
これで所望の挙動が得られました。皆さんのご参考になれば幸いです。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.037s