C#中如何缩放由4个Vector3顶点组成的矩形(扩大0.5单位)
解决矩形顶点固定偏移扩大的问题
嘿,你的问题很典型——依赖坐标系象限的偏移逻辑确实会在顶点落在坐标轴上时失效,而且只适用于中心在原点的矩形。这里有个不依赖位置的通用方法,能让你给矩形每个顶点向外固定偏移0.5单位,完美解决你的需求:
核心思路
要实现固定距离的“扩大”,关键是找到矩形的中心,然后让每个顶点沿着从中心指向自身的方向向外移动指定距离。这样不管矩形在坐标系的哪个位置,哪怕顶点在坐标轴上,都能均匀扩大,不会出现遗漏或错误偏移。
具体实现代码
// 先计算矩形的中心坐标 Vector3 center = Vector3.zero; foreach (Vector3 element in list) { center += element; } center /= list.Count; // 这里list是4个顶点,也可以直接写除以4 List<Vector3> list2 = new List<Vector3>(); float expandDistance = 0.5f; foreach (Vector3 element in list) { // 计算从中心指向当前顶点的方向向量 Vector3 direction = element - center; // 避免极端情况(比如所有点重合),做个小阈值判断 if (direction.magnitude > 0.0001f) { // 归一化方向向量,确保移动的是固定距离 Vector3 unitDirection = direction.normalized; // 计算新顶点:原顶点 + 方向*偏移距离,y轴保持0(和你原代码逻辑一致) Vector3 newVertex = new Vector3( element.x + unitDirection.x * expandDistance, 0, element.z + unitDirection.z * expandDistance ); list2.Add(newVertex); } else { // 极端情况:顶点和中心重合,直接添加原顶点 list2.Add(element); } }
为什么这个方法更可靠
- 不依赖坐标系位置:不管矩形在世界的哪个角落,中心计算都是基于自身顶点,偏移逻辑完全自包含
- 覆盖所有顶点情况:哪怕顶点x或z为0,只要它是矩形的顶点,就能正确计算方向并偏移
- 保持矩形形状:偏移后依然是和原矩形平行的矩形,不会变形
如果你的矩形y轴不需要固定为0,只需要把代码里的0改成element.y即可,非常灵活。
内容的提问来源于stack exchange,提问作者xnik
相关产品推荐
相关产品推荐

