Files
tianrunCRM/Assets/CoolapeFrame/Scripts/toolkit/AngleEx.cs

66 lines
1.9 KiB
C#
Raw Normal View History

2020-07-04 14:41:25 +08:00
/*
********************************************************************************
*Copyright(C),coolae.net
*Author: chenbin
*Version: 2.0
*Date: 2017-01-09
*Description:
*Others:
*History:
*********************************************************************************
*/
using UnityEngine;
using System.Collections;
namespace Coolape
{
public static class AngleEx
{
// xy平面上的两个点A(a,b),B(c,d),求C(e,f)沿A-->B的向量方向移动一定距离h;此时求所在的位置D的xy坐标
// xy正切值是(d-b)/(c-a);
//假设D(x,y)可以得两个方程:
//(y-f)/(x-e) = (d-b)/(c-a);
//(y-f)^2 + (x-e) ^2 = h ^2;
//可求得x,y
static public Vector2 getEndVector2(Vector2 directionalFrom, Vector2 directionalTo, Vector2 from, float toDistance)
{
float x = 0f;
float y = 0f;
//取得正切值
float tanXY = (directionalTo.y - directionalFrom.y) / (directionalTo.x - directionalFrom.x);
float xx = Mathf.Pow(toDistance, 2) / (Mathf.Pow(tanXY, 2) + 1);
x = Mathf.Sqrt(xx) + from.x;
y = tanXY * (x - from.x) + from.y;
return new Vector2(x, y);
}
//求圆心p,半径r逆时针角度angle所得的圆上的点的坐标
static public Vector2 getCirclePointV2(Vector2 p, float r, float angle)
{
//弧度
float radian = angle * Mathf.PI / 180;
float x = p.x + r * Mathf.Cos(radian);
float y = p.y + r * Mathf.Sin(radian);
return new Vector2(x, y);
}
static public Vector3 getCirclePointV3(Vector3 p, float r, float angle)
{
float y = p.y;
Vector2 pos = getCirclePointV2(new Vector2(p.x, p.z), r, angle);
return new Vector3(pos.x, y, pos.y);
}
static public Vector3 getCirclePointStartWithXV3(Vector3 p, float r, float angle)
{
return getCirclePointV3(p, r, angle);
}
static public Vector3 getCirclePointStartWithYV3(Vector3 p, float r, float angle)
{
return getCirclePointV3(p, r, 90 - angle);
}
}
}