質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Q&A

解決済

2回答

528閲覧

2つの面について、ある角度を求めたい。

Miya_kp

総合スコア21

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

0グッド

0クリップ

投稿2022/09/08 13:43

実現したいこと

2枚目の画像の角度θを求めたいです。仮の値として赤い面はX30°Y10°回転させています。数学的な質問になってしまって申し訳ないのですが、よろしくお願いいたします。また、この角度を求めるのに使えそうなメソッドがあれば教えていただきたいです。
イメージ説明
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kikukiku

2022/09/09 01:03

この赤い線は、赤色面上の線なのか?灰色面上の線なのか? 赤い線はどのようなルールで引かれた線なのか? このあたりが決まらないと回答が一意に決まらないと思いました。
guest

回答2

0

ベストアンサー

ご質問者さんの図を拝見しまして、私の場合は「2枚の板の交線を求めて、それとワールド空間水平面との角度を得たい」ということだろうかと解釈しました。
そこで下記のようなスクリプトにしてみたのですが、いかがでしょうかね?

C#

1using UnityEngine; 2 3public class IntersectionAngleCalculator : MonoBehaviour 4{ 5 // インスペクター上でこれらのフィールドに白板、赤板をセットしておく 6 [SerializeField] private Transform whitePanel; 7 [SerializeField] private Transform redPanel; 8 9 private void Update() 10 { 11 // スペースキーを押したら角度を計算する 12 if (Input.GetKeyDown(KeyCode.Space)) 13 { 14 // 交線の向きは白板の法線と赤板の法線の外積の向きになるはず 15 var cross = Vector3.Cross(this.whitePanel.forward, this.redPanel.forward); 16 17 // 外積ベクトルの長さを求める 18 // ※ささやかながら計算量節約のため、実際には長さの2乗を使いました 19 var crossSqrMagnitude = cross.sqrMagnitude; 20 21 if (crossSqrMagnitude > 0.0f) 22 { 23 // 外積ベクトルを正規化し、交線の向きとする 24 // ※使うのはY成分だけなので、実際にはY成分だけ求めました 25 var intersectionDirectionY = cross.y / Mathf.Sqrt(crossSqrMagnitude); 26 27 // Y成分のアークサインが交線と水平面の角度になるはず 28 // ※とりあえず正負は無視して、正の値として求めるようにしました 29 var angleInRadians = Mathf.Abs(Mathf.Asin(intersectionDirectionY)); 30 31 // コンソールに結果を度数法で表示する 32 Debug.Log($"Angle: {angleInRadians * Mathf.Rad2Deg}"); 33 } 34 else 35 { 36 // 白板と赤板が平行だと交線を求めることができない 37 Debug.LogError($"{this.whitePanel.name} and {this.redPanel.name} are parallel."); 38 } 39 } 40 } 41}

投稿2022/09/09 23:39

Bongo

総合スコア10807

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Miya_kp

2022/09/10 00:46

わかりやすいスクリプトまで作っていただき、ありがとうございます!非常に助かりました。
guest

0

2次元平面上での2直線の成す角というのは,両直線の法線がわかってれば求められるよね(e.g. 単位法線同士の内積から cosθ がわかるよね).
そしたら,例えば角度を考えている2次元平面が灰色の面なのだとしたら,この2次元平面上での2直線の法線があればよい,と.

  • 赤面の法線Nから Nの灰色面の法線方向の成分 を取っ払ったベクトル N' を求めれば,それが,角度を考える2次元平面上での斜めの線(:赤灰2面の交差する直線)の法線である.
  • フリーハンドで引いてる赤い線の側については向き(法線)は当然既知なのだろう

…ってことで,角度θを求められるであろう,と見えます.

#Unityのことは全く知らんです.

投稿2022/09/09 01:26

編集2022/09/09 01:28
fana

総合スコア11658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問