找回密码
 立即注册
查看: 185|回复: 0

Unity 求出多个物体的中心点

[复制链接]
发表于 2022-11-19 08:55 | 显示全部楼层 |阅读模式
using System.Collections;using System.Collections.Generic;using UnityEngine;public class GetCenterPointFunction{    /// <summary>    /// 获取不规则多边形几何中心点    /// </summary>    /// <param name="mPoints"></param>    /// <returns></returns>    public static Vector2 GetCenterPoint(List<Vector2> mPoints)    {        float cx = (GetMinX(mPoints) + GetMaxX(mPoints)) / 2;        float cy = (GetMinY(mPoints) + GetMaxY(mPoints)) / 2;        return new Vector2(cx, cy);    }    /// <summary>    /// 获取最小X值    /// </summary>    /// <param name="mPoints"></param>    /// <returns></returns>    public static float GetMinX(List<Vector2> mPoints)    {        float minX = 0;        if (mPoints.Count > 0)        {            minX = mPoints[0].x;            foreach (Vector2 point in mPoints)            {                if (point.x < minX)                    minX = point.x;            }        }        return minX;    }    /// <summary>    /// 获取最大X值    /// </summary>    /// <param name="mPoints"></param>    /// <returns></returns>    public static float GetMaxX(List<Vector2> mPoints)    {        float maxX = 0;        if (mPoints.Count > 0)        {            maxX = mPoints[0].x;            foreach (Vector2 point in mPoints)            {                if (point.x > maxX)                    maxX = point.x;            }        }        return maxX;    }    /// <summary>    /// 获取最小Y值    /// </summary>    /// <param name="mPoints"></param>    /// <returns></returns>    public static float GetMinY(List<Vector2> mPoints)    {        float minY = 0;        if (mPoints.Count > 0)        {            minY = mPoints[0].y;            foreach (Vector2 point in mPoints)            {                if (point.y < minY)                    minY = point.y;            }        }        return minY;    }    /// <summary>    /// 获取最大Y值    /// </summary>    /// <param name="mPoints"></param>    /// <returns></returns>    public static float GetMaxY(List<Vector2> mPoints)    {        float maxY = 0;        if (mPoints.Count > 0)        {            maxY = mPoints[0].y;            foreach (Vector2 point in mPoints)            {                if (point.y > maxY)                    maxY = point.y;            }        }        return maxY;    }    /// <summary>    /// 获取不规则多边形重心点    /// </summary>    /// <param name="mPoints"></param>    /// <returns></returns>    public static Vector2 GetCenterOfGravityPoint(List<Vector2> mPoints)    {        float area = 0.0f;//多边形面积        float gx = 0.0f, gy = 0.0f;// 重心的x、y        for (int i = 1; i <= mPoints.Count; i++)        {            float iX = mPoints[i % mPoints.Count].x;            float iY = mPoints[i % mPoints.Count].y;            float nextX = mPoints[i - 1].x;            float nextY = mPoints[i - 1].y;            float temp = (iX * nextY - iY * nextX) / 2.0f;            area += temp;            gx += temp * (iX + nextX) / 3.0f;            gy += temp * (iY + nextY) / 3.0f;        }        gx = gx / area;        gy = gy / area;        Vector2 v2 = new Vector2(gx, gy);        return v2;    }}
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-6-27 16:33 , Processed in 0.090182 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表