Unity之Quaternion学习(一):求三角形面积

发表于2017-09-05
评论0 873浏览
在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学习系列:



如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

0个评论