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;
}
/// <summary>
/// 求出三角形的面积 三角形面积公式
/// </summary>
/// <param name="v1"></param>
/// <param name="v2"></param>
/// <param name="v3"></param>
/// <returns></returns>
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;
}
}
版权声明:本文为Rose_Girls原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。