Unity之Quaternion学习(一):求三角形面积
发表于2017-09-05
在Unity中,用Quaternion来存储和表示对象的旋转角度,考虑到有些人可能还不熟悉Quaternion,为此这个系列就给大家Unity中的四元数-Quaternion。下面就给大家介绍第一篇关于如何去求三角形的面积。
using UnityEngine; using System.Collections; public class SinDemo : MonoBehaviour { public GameObject gameobj1; // Use this for initialization void Start () { //CalueAngel(); } // Update is called once per frame void Update () { CalueForward(); } void CalueAngel() { Vector3 vec1 = transform.position; Vector3 vec2 = gameobj1.transform.position; float y = vec2.z - vec1.z; float x = vec2.x - vec1.x; float tan = y / x; float angel = tan * 180 / Mathf.PI; Debug.LogError("tan" tan " angel is " angel); Debug.DrawLine(vec1, vec2, Color.red); } void CalueForward() { float dis = 5f; float angel = 45; Quaternion qua1 = transform.rotation; Vector3 pos1 = (transform.position (qua1 * Vector3.forward) * dis); Debug.DrawLine(transform.position, pos1, Color.red); Quaternion qua2 = Quaternion.Euler(transform.eulerAngles.x, transform.eulerAngles.y - angel, transform.eulerAngles.z); Quaternion qua3 = Quaternion.Euler(transform.eulerAngles.x, transform.eulerAngles.y angel, transform.eulerAngles.z); Vector3 pos2 = (transform.position (qua2 * Vector3.forward) * dis); Vector3 pos3 = (transform.position (qua3 * Vector3.forward) * dis); Debug.DrawLine(transform.position, pos2, Color.green); Debug.DrawLine(transform.position, pos3, Color.green); Debug.DrawLine(pos1, pos2, Color.red); Debug.DrawLine(pos1, pos3, Color.red); Vector3 point = gameobj1.transform.position; if (IsInTriangle(point, transform.position, pos2, pos1) || IsInTriangle(point, transform.position, pos1, pos3)) { Debug.LogError("is in"); } else { Debug.LogError("is not in " transform.position); } } bool IsInTriangle(Vector3 point,Vector3 v1, Vector3 v2, Vector3 v3) { Vector2 tPoint = new Vector2(); tPoint.x = point.x; tPoint.y = point.z; Vector2 tv1 = new Vector2(); tv1.x = v1.x; tv1.y = v1.z; Vector2 tv2 = new Vector2(); tv2.x = v2.x; tv2.y = v2.z; Vector2 tv3 = new Vector2(); tv3.x = v3.x; tv3.y = v3.z; float area = GetAreaOfTirangle(tv1, tv2, tv3); //物体对象和已知几点所形成的几个三角形 float subArea = GetAreaOfTirangle(tv1, tv2, tPoint) GetAreaOfTirangle(tv1, tPoint, tv3) GetAreaOfTirangle(tPoint, tv2, tv3); if (Mathf.Abs(area - subArea) <= 0.01f) { return true; } return false; } ////// 求出三角形的面积 三角形面积公式 /// /// /// /// ///float GetAreaOfTirangle(Vector2 v1,Vector2 v2,Vector2 v3) { //设A(x1,y1),B(x2,y2),C(x3,y3) //S=(1/2)*(x1y2 x2y3 x3y1-x1y3-x2y1-x3y2) float area = (v1.x * v2.y v2.x * v3.y v3.x * v1.y) - (v1.x * v3.y v2.x * v1.y v3.x * v2.y); area = Mathf.Abs(area / 2); return area; } }
Unity之Quaternion学习系列:
如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引