ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 10811|回复: 10

[原创] 已知空间三角形的顶点坐标,求它的外接圆的圆心坐标(解析几何法)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-10-15 11:39 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

已知一个空间三角形ABC三个顶点的坐标:

A(x1,y1,z1)   B(x2,y2,z2)  C(x3,y3,z3)

当然这3个点不在一条直线上,否则就不能组成一个三角形了。

运用解析几何的方法,我们可以运用两条直线的方程之间的关系求得两条直线的交点坐标、通过直线上一点求得该直线的垂直线方程、根据两个点的坐标求得该两点的距离等等。


空间三角形在XY平面上的投影A’B’C’是平面三角形,

我们知道一个平面三角形的外接圆的圆心的位置就是该三角形两条边的垂直平分线的交点(如附图所示)


总的思路是:


1, 根据三个顶点的坐标求得三条边的方程系数;

2, 求得A’B’边的中点D’的坐标,通过D’点的A’B’边的垂直平分线的方程系数;

3, 求得A’C’边的中点E’的坐标,通过E’点的A’C’边的垂直平分线的方程系数;

4, 求得这两条垂直平分线的交点O’坐标,这个就是外接圆的圆心OXY坐标;

5, 求得A’B’边的中点D’到圆心O’的长度(D’ O’ 的长度);

6, A’B’边的垂直平分线与另外两条边B’C’A’C’都有交点F’G’,求得这两个交点的坐标;

7, 分别判断F’的坐标是否在B’C’点之间,G’的坐标是否在A’C’点之间,如果满足条件则进行下面的计算;

8, D’F’满足条件为例:求得D’F’的长度、B’C’的长度和B’F’的长度;

9, 求得F点的Z坐标;
10,最后根据D’ O’D’F’的的比值、FZ坐标和DZ坐标,求得圆心OZ
坐标。

复制代码
圆心坐标计算.rar (33.34 KB, 下载次数: 205)


2016-10-15空间三角形.png
2016-10-15三角形.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-10-15 11:40 | 显示全部楼层
  1. Type kjPoint
  2.     x As Double
  3.     y As Double
  4.     z As Double
  5. End Type
  6. Sub lqxs()
  7. Dim ptA As kjPoint, ptB As kjPoint, ptC As kjPoint, n&
  8. Dim ABFa, ABFb, ABFc, ACFa, ACFb, ACFc, BCFa, BCFb, BCFc
  9. Dim ABl, ACl, BCl
  10. Dim zd, ABz_x, ABz_y, ACz_x, ACz_y
  11. Dim ABzxFa, ABzxFb, ABzxFc, ACzxFa, ACzxFb, ACzxFc
  12. Dim ABsz_z, BCzl
  13. Dim zx_x, zx_y, zx_z
  14. ptA.x = [c5].Value: ptA.y = [d5].Value: ptA.z = [e5].Value '点A坐标
  15. ptB.x = [c6].Value: ptB.y = [d6].Value: ptB.z = [e6].Value '点B坐标
  16. ptC.x = [c7].Value: ptC.y = [d7].Value: ptC.z = [e7].Value '点C坐标
  17. 'XY平面
  18. ABFa = ptB.y - ptA.y: ABFb = ptA.x - ptB.x: ABFc = -ABFb * ptA.y - ABFa * ptA.x '直线AB的方程系数'
  19. BCFa = ptC.y - ptB.y: BCFb = ptB.x - ptC.x: BCFc = -BCFb * ptB.y - BCFa * ptB.x '直线BC的方程系数'
  20. ACFa = ptC.y - ptA.y: ACFb = ptA.x - ptC.x: ACFc = -ACFb * ptA.y - ACFa * ptA.x '直线AC的方程系数'

  21. ABl = dist(ptA.x, ptA.y, ptB.x, ptB.y) '直线AB的XY平面的投影长度
  22. ACl = dist(ptA.x, ptA.y, ptC.x, ptC.y) '直线AC的XY平面的投影长度
  23. BCl = dist(ptB.x, ptB.y, ptC.x, ptC.y) '直线BC的XY平面的投影长度

  24. 'D'坐标
  25. zd = (ptA.x - ptB.x) / 2
  26. ABz_x = zd + ptB.x
  27. zd = (ptA.y - ptB.y) / 2
  28. ABz_y = zd + ptB.y

  29. 'G'坐标
  30. zd = (ptA.x - ptC.x) / 2
  31. ACz_x = zd + ptC.x
  32. zd = (ptA.y - ptC.y) / 2
  33. ACz_y = zd + ptC.y

  34. 'AB垂直平分线方程的系数
  35. ABzxFa = ABFb: ABzxFb = -ABFa: ABzxFc = ABFa * ABz_y - ABFb * ABz_x
  36. 'AC垂直线方程的系数
  37. ACzxFa = ACFb: ACzxFb = -ACFa: ACzxFc = ACFa * ACz_y - ACFb * ACz_x
  38. '圆心x,y坐标
  39. zx_x = jiaox1(ABzxFa, ABzxFb, ABzxFc, ACzxFa, ACzxFb, ACzxFc)
  40. zx_y = jiaoy1(ABzxFa, ABzxFb, ABzxFc, ACzxFa, ACzxFb, ACzxFc)

  41. 'AB垂直平分线与BC的交点坐标(F')

  42. abzx2bc_x = jiaox1(ABzxFa, ABzxFb, ABzxFc, BCFa, BCFb, BCFc)
  43. abzx2bc_y = jiaoy1(ABzxFa, ABzxFb, ABzxFc, BCFa, BCFb, BCFc)

  44.     D_z = (ptA.z - ptB.z) / 2 + ptB.z
  45.     dol = dist(ABz_x, ABz_y, zx_x, zx_y)
  46. If ptB.x <= ptC.x Then xmin = ptB.x: xmax = ptC.x Else xmin = ptC.x: xmax = ptB.x
  47. If ptB.y <= ptC.y Then ymin = ptB.y: ymax = ptC.y Else ymin = ptC.y: ymax = ptB.y
  48. If abzx2bc_x >= xmin And abzx2bc_x <= xmax Then
  49. 'B'F'长度  ' 直线BC上B点到垂直线交点的XY平面的投影长度
  50.     BFl = dist(ptB.x, ptB.y, abzx2bc_x, abzx2bc_y)

  51. 'AB中线D的Z轴坐标值
  52. 'F点的Z值   AB垂直平分线与BC交点的Z轴坐标值
  53.     F_z = BFl / BCl * (ptC.z - ptB.z) + ptB.z

  54.     dfl = dist(ABz_x, ABz_y, abzx2bc_x, abzx2bc_y)
  55.     'dol = dist(ABz_x, ABz_y, zx_x, zx_y)
  56.     Bl = dol / dfl


  57. '圆心z坐标
  58.     zx_z = Bl * (F_z - D_z) + D_z

  59. Else
  60.     abzx2ac_x = jiaox1(ABzxFa, ABzxFb, ABzxFc, ACFa, ACFb, ACFc)
  61.     abzx2ac_y = jiaoy1(ABzxFa, ABzxFb, ABzxFc, ACFa, ACFb, ACFc)

  62.     If ptA.x <= ptC.x Then xmin = ptA.x: xmax = ptC.x Else xmin = ptC.x: xmax = ptA.x
  63.     If ptA.y <= ptC.y Then ymin = ptA.y: ymax = ptC.y Else ymin = ptC.y: ymax = ptA.y
  64.     If abzx2ac_x >= xmin And abzx2ac_x <= xmax Then
  65.         AGl = dist(ptA.x, ptA.y, abzx2ac_x, abzx2ac_y)
  66.         G_z = AGl / ACl * (ptC.z - ptA.z) + ptA.z

  67.         dgl = dist(ABz_x, ABz_y, abzx2ac_x, abzx2ac_y)
  68.         Bl = dol / dgl
  69.         zx_z = Bl * (G_z - D_z) + D_z
  70.     End If
  71. End If
  72. MsgBox "外接圆心的坐标是 (" & Format(zx_x, "0.0000") & "," & Format(zx_y, "0.0000") & "," & Format(zx_z, "0.0000") & ")"
  73. End Sub

  74. '直线交点的X坐标
  75. Function jiaox1(ca1, cb1, cc1, ca2, cb2, cc2)
  76.     jiaox1 = (cc2 * cb1 - cc1 * cb2) / (ca1 * cb2 - ca2 * cb1)
  77. End Function

  78. Function jiaoy1(ca1, cb1, cc1, ca2, cb2, cc2)
  79.     jiaoy1 = -(ca1 * cc2 - ca2 * cc1) / (ca1 * cb2 - ca2 * cb1)
  80. End Function

  81. Function dist(cordx1, cordy1, cordx2, cordy2)
  82.     dist = Sqr((cordx2 - cordx1) ^ 2 + (cordy2 - cordy1) ^ 2)
  83. End Function
复制代码

TA的精华主题

TA的得分主题

发表于 2016-10-15 20:59 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-10-15 21:38 | 显示全部楼层
过程比较繁琐。

但这得到的只是与ABC三点在同一平面上的圆心点。

如果真要说是三维空间,到三点之间距离相等的点也会是一条直线了吧。
(过O点并且垂直于ABC所在平面。)

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-10-16 08:52 | 显示全部楼层
香川群子 发表于 2016-10-15 21:38
过程比较繁琐。

但这得到的只是与ABC三点在同一平面上的圆心点。

香川的评价不错:
计算过程比较繁琐。得到的只是与ABC三点在同一平面上的圆心点。

这就是空间三角形ABC的外接圆的圆心,与“到三点之间距离相等的点”是不一样的问题。

TA的精华主题

TA的得分主题

发表于 2016-12-21 15:14 | 显示全部楼层
老师以后就跟你学习好不,求带

TA的精华主题

TA的得分主题

发表于 2016-12-21 15:15 | 显示全部楼层
lzqlaj 发表于 2016-10-15 20:59
好贴子,收藏了。

请问,你会用了吗?能指点一下吗?

TA的精华主题

TA的得分主题

发表于 2016-12-21 15:15 | 显示全部楼层
香川群子 发表于 2016-10-15 21:38
过程比较繁琐。

但这得到的只是与ABC三点在同一平面上的圆心点。

您好:请问,这个有什么实际用途没?

TA的精华主题

TA的得分主题

发表于 2016-12-21 15:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
蓝桥玄霜 发表于 2016-10-16 08:52
香川的评价不错:
计算过程比较繁琐。得到的只是与ABC三点在同一平面上的圆心点。

您好:请问你会做加载宏吗?能否指导一下?

TA的精华主题

TA的得分主题

发表于 2017-3-15 13:55 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-25 16:45 , Processed in 0.040854 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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