![]() |
1
5
考虑两个球体的交点。要可视化它,考虑连接球体两个中心的三维直线段n。考虑这个横截面 alt text http://gara.matt.googlepages.com/circles.PNG 其中红线为正N平面的横截面,对称性可以任意角度旋转该横截面,红线段长度不变。这意味着两个球体相交的结果曲线是一个圆,并且必须位于一个具有法向n的平面上。 也就是说,让我们开始寻找十字路口。首先,我们要描述两个球体相交的结果圆。你 不能 用一个方程做这个,一个三维的圆基本上就是一个三维的曲线,你不能用一个方程来描述三维的曲线。 考虑一下图片 alt text http://gara.matt.googlepages.com/circlesa.PNG 设P为蓝红线的交点。设h为从点p向上沿红线的线段长度。让两个中心之间的距离用d表示。让x是小圆心到p的距离。那么我们必须
也就是说,你可以解出h,它是相交圆的半径。您可以从x找到圆的中心点c,沿着连接两个圆心的线n。 然后你可以把圆完全描述为(x,c,u,v都是向量)
其中u和v是垂直向量,它们位于一个法向n的平面上。 最后一部分是最简单的。它只会找到这个圆与最终球体的交点。这只是方程的一个插接和插接(上一个方程中的x,y,z为插接形式,x,y,z为参数形式,t为求解形式)。 编辑--- 你将得到的方程实际上是非常难看的,你会得到一整串正弦和余弦等于某个东西。要解决这个问题,您可以通过两种方式:
|
![]() |
2
8
可能比构建三维圆更容易,因为主要在直线和平面上工作: 对于每对球体,通过减去球体方程(每种形式x^2+y^2+z^2+a),得到包含其交集圆的平面方程。 X+B Y+C*Z+D=0)。然后你将有三个平面,p12 p23 p31。 这些平面有一条公共线L,垂直于平面Q,由球体的三个中心构成。你要找的两点在这条线上。点的中间是l和q之间的交点h。 要实现这一点:
显示各种平面和线L的cabri三维结构 |
![]() |
3
6
基本上你需要分三步来完成。假设你有三个球体,s1,s2和s3。
这里唯一真正困难的部分是球体交叉点,谢天谢地 Mathworld has that solved pretty well . 事实上,MathWorld也有 solution to the circle intersections . 根据这些信息,您应该能够创建一个算法。 |
![]() |
4
5
这是我刚从维基百科文章中移植的一个关于python的答案。不需要算法;有一个封闭形式的解决方案。
|
![]() |
5
3
在搜索了网页后,这是第一次点击,因此我在这里发布了几个小时的研究后发现的最干净、最简单的解决方案: Trilateration 这个wiki网站包含了一个快速且易于理解的矢量方法的完整描述,因此人们可以轻松地对其进行编码。 |
![]() |
6
1
下面是埃里克在上面发布的图片的另一种解释: 设h为三个球体中心所横跨的平面。设c1,c2,c3为球体与h的交点,c1,c2,c3为圆。让lij是连接ci和cj两个交点的线,然后这三条线l12、l23、l13在一个点p相交。让m是与h到p正交的线,那么你的两个交点就在m线上,因此你只需要将m与任一球体相交。 |
![]() |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
![]() |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |
![]() |
Wadu Hek · 查找列表中唯一的重复项 2 年前 |
![]() |
Crawford Patten · 如何获得整数列表的四分位数 2 年前 |
![]() |
MoonGoose · 如何在python中围绕特殊字符创建空间? 2 年前 |
![]() |
taha khamis · 在一个数字中组合元素的省道 2 年前 |
![]() |
Soup · 比O(n)更快地找到阶乘n模m 2 年前 |
![]() |
BigO · 单词积分游戏不断增加数字[关闭] 2 年前 |