Unity 已知两点位置,求以这两点为直径的圆上的任意坐标

 public class Test : MonoBehaviour
    {
        public GameObject OriPosObj;
        public GameObject TargetPosObj;
        [Range(1, 180)]
        public float fAngle;
        public GameObject goEffect;
        private List<Vector3> mPosList = new List<Vector3>();

        public bool bChange = true;

        private void Start()
        {
            TrailRenderer trailRenderer = null;
            trailRenderer.Clear();
        }

        private void Update()
        {
            if (bChange)
            {
                bChange = false;
                Vector3 OriPos = OriPosObj.transform.position;
                Vector3 TargetPos = TargetPosObj.transform.position;
                Vector3 OTZuoBiao_centerPos = (OriPos + TargetPos) / 2f;
                Vector3 centerPos = OTZuoBiao_centerPos;
                float r = Vector3.Distance(TargetPos, OriPos) / 2;

                float fMinAngle = Mathf.Atan((OriPos.y - centerPos.y) / (OriPos.x - centerPos.x));
                float fMaxAngle = Mathf.Atan((TargetPos.y - centerPos.y) / (TargetPos.x - centerPos.x));
                Debug.Log("开始角000 : " + Mathf.Rad2Deg * fMinAngle);
                Debug.Log("结束角000 : " + Mathf.Rad2Deg * fMaxAngle);

                if (OriPos.y - centerPos.y >= 0 && OriPos.x - centerPos.x >= 0)
                {
                    fMinAngle = Mathf.Abs(fMinAngle);
                }
                else if (OriPos.y - centerPos.y >= 0 && OriPos.x - centerPos.x <= 0)
                {
                    fMinAngle = Mathf.PI - Math.Abs(fMinAngle);
                }
                else if (OriPos.y - centerPos.y <= 0 && OriPos.x - centerPos.x <= 0)
                {
                    fMinAngle = Mathf.PI + Math.Abs(fMinAngle);
                }
                else if (OriPos.y - centerPos.y <= 0 && OriPos.x - centerPos.x >= 0)
                {
                    fMinAngle = Mathf.PI * 2 - Math.Abs(fMinAngle);
                }
                
                if (TargetPos.y - centerPos.y >= 0 && TargetPos.x - centerPos.x >= 0)
                {
                    fMaxAngle = Math.Abs(fMaxAngle);
                }
                else if (TargetPos.y - centerPos.y >= 0 && TargetPos.x - centerPos.x <= 0)
                {
                    fMaxAngle = Mathf.PI - Math.Abs(fMaxAngle);
                }
                else if (TargetPos.y - centerPos.y <= 0 && TargetPos.x - centerPos.x <= 0)
                {
                    fMaxAngle = Mathf.PI + Math.Abs(fMaxAngle);
                }
                else if (TargetPos.y - centerPos.y <= 0 && TargetPos.x - centerPos.x >= 0)
                {
                    fMaxAngle = Mathf.PI * 2 - Math.Abs(fMaxAngle);
                }

                if (OriPos.x >= TargetPos.x)
                {
                    if (fMaxAngle < fMinAngle)
                    {
                        fMaxAngle += Mathf.PI * 2;
                    }
                }
                else
                {
                    if (fMaxAngle > fMinAngle)
                    {
                        fMaxAngle -= Mathf.PI * 2;
                    }
                }

                Debug.Log("开始角111: " + Mathf.Rad2Deg * fMinAngle);
                Debug.Log("结束角111: " + Mathf.Rad2Deg * fMaxAngle);

                //float fAddAngle = (fMaxAngle - fMinAngle) / nSegmentCount;

                //mPosList.Clear();

                //for (int i = 0; i <= nSegmentCount; i++)
                //{
                //    float fAngle2 = fMinAngle + i * fAddAngle;
                //    float fTempPosX = 0;
                //    float fTempPosY = 0;
                    
                //    fTempPosX = centerPos.x + r * Mathf.Cos(fAngle2);
                //    fTempPosY = centerPos.y + r * Mathf.Sin(fAngle2);
                    
                //    mPosList.Add(new Vector3(fTempPosX, fTempPosY, 0));
                //    goEffect.transform.position = new Vector3(fTempPosX, fTempPosY, 0);
                //}

                goEffect.transform.position = OriPos;
                LeanTween.value(fMinAngle, fMaxAngle, 1.0f).setOnUpdate((float fAngle2)=>
                {
                    float fTempPosX = 0;
                    float fTempPosY = 0;

                    fTempPosX = centerPos.x + r * Mathf.Cos(fAngle2);
                    fTempPosY = centerPos.y + r * Mathf.Sin(fAngle2);

                    goEffect.transform.position = new Vector3(fTempPosX, fTempPosY, 0);
                });

                
            }
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值