You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中如何通过两个向量计算圆的圆心?求有效实现方案

通过两个圆上点计算圆心的说明

核心结论

仅给定圆上的两个点,无法唯一确定圆心。因为这两个点可以作为无数个圆的公共弦,所有可能的圆心都在这两点连线的垂直平分线上。

比如你给出的点(2,4)和(4,6),它们连线的中点是(3,5),连线的方向向量是(2,2),垂直平分线的斜率为-1,方程为 y = -x + 8。你提到的圆心(4,4)确实在这条线上,但这条线上的任意点都可以作为过这两个点的圆的圆心,只是对应圆的半径不同。

示例隐含的必要条件

如果要得到唯一的圆心,必须补充额外约束:比如已知圆的半径、第三个圆上的点,或者圆心满足特定位置要求(比如在某条坐标轴上、与某条直线相切等)。从你描述的示意图来看(图中包含多个圆上点与绿色圆心),你实际场景中应该存在未明确说明的额外约束。

测试代码问题分析

你提供的两段代码均基于垂直平分线思路,但存在逻辑偏差:

第一段代码问题

Vector3 direction = point1.forward.normalized;
Vector3 centerApproximation = (point1.position + point2.position) / 2f;
float distance = Vector3.Distance(point1.position, point2.position);
Vector3 orthoVector = Vector3.Cross(direction, Vector3.up);
Vector3 circleCenter = centerApproximation + orthoVector.normalized * Mathf.Sqrt((distance * distance) / 4 - Vector3.Dot(centerApproximation - point1.position, orthoVector.normalized));

这段代码引入了point1.forward作为额外方向约束,但计算逻辑有误:中点到点1的向量与垂直平分线方向垂直,导致Vector3.Dot(...)结果为0,根号内仅保留半径相关项,最终得到的只是垂直平分线上的一个点,且依赖point1.forward的正确性,无法保证是你需要的特定圆心。

第二段代码问题

// Trouver le point médian
Vector3 midpoint = (point1 + point2) / 2f;
// Calculer un vecteur perpendiculaire à la droite formée par les deux points
Vector3 direction = (point2 - point1).normalized;
Vector3 perpendicular = new Vector3(-direction.z, 0, direction.x); // Pour un plan 2D, si besoin
// Ajouter ce vecteur au point médian pour obtenir le troisième point
Vector3 thirdPoint = midpoint + perpendicular * (distance / 2f);

这段代码仅在垂直平分线上生成了一个点(作为第三个参考点),并没有计算目标圆心——它只是无数可能圆心的其中一个,并非你指定的(4,4)。

补充约束后的正确推导

如果你的场景明确了约束条件(比如已知圆的半径r),可以通过以下步骤计算圆心:

  1. 计算两点A(x1,y1)和B(x2,y2)的中点M((x1+x2)/2, (y1+y2)/2)
  2. 计算AB的长度d = √[(x2-x1)² + (y2-y1)²]
  3. 计算垂直平分线上从M到圆心的距离h = √[r² - (d/2)²](需满足r ≥ d/2,否则无解)
  4. 计算AB的垂直方向单位向量:若AB的方向向量为(dx, dy),则垂直方向向量为(-dy, dx)或(dy, -dx),归一化后乘以h,加到中点M上,得到两个可能的圆心。

以你的示例为例:点(2,4)和(4,6),已知目标圆心(4,4)对应的半径r=2,计算得d=2√2,h=√2;AB的垂直方向向量归一化后为(1,-1),加到中点(3,5)上即可得到(4,4)。

内容的提问来源于stack exchange,提问作者ColomerLu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 17:37:09