请选择 进入手机版 | 继续访问电脑版

唐康林NX二次开发论坛

 找回密码
 立即注册
查看: 823|回复: 4

[技术分享] 已知三点坐标求圆心方法!(纯数学方法)

[复制链接]

548

主题

729

帖子

3228

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3228
发表于 2017-9-11 13:57:19 | 显示全部楼层 |阅读模式
我就不截图片了,按我下列描述,大家可以自己画一下。
对于三点ABC,可以构成三角形ABC;
设这个三角形的外接圆圆心为O;
过O作OD垂直于AB与D点。
而OD的长度为为外接圆半径的平方 减去 1/2*AB的平方,再开方,这是勾股定理。
圆的半径,可以根据海伦公式求得。
有了OD的长度,只要求到OD的向量,就可以求出圆心了,即,圆心是D点(AB的中点)沿OD向量,移动了OD的长度。
下图是源代码
游客,如果您要查看本帖隐藏内容请回复

用法:
  1. double tolerance = 0.0;
  2. UF_MODL_ask_distance_tolerance(&tolerance);//建模距离公差(也可以自定义一个公差)

  3. //三点
  4. double p1[3] = {10.0, 20.0, 30.0}, p2[3] = {50.0, 70.0, 90.0}, p3[3] = {30.0, 20.0, 150.0};

  5. //计算三点所组成三角形的外接圆半径
  6. double R = 0.0, r = 0.0;
  7. double centerP[3] = {0.0};
  8. int errorCode = GetCircleCenterCoord(p3, p2, p1, tolerance, &R, centerP);

  9. if (!errorCode)
  10. {
  11.         lw->Open();
  12.         char msg[256];
  13.         sprintf(msg, "%f,%f,%f, 半径:%f", centerP[0], centerP[1], centerP[2], R);
  14.         lw->WriteLine(msg);
  15. }
复制代码



回复

使用道具 举报

0

主题

1

帖子

13

积分

潜龙勿用

Rank: 1

积分
13
发表于 2017-10-12 13:43:33 | 显示全部楼层
谢谢分享
回复

使用道具 举报

0

主题

92

帖子

981

积分

或跃在渊

Rank: 4

积分
981
发表于 2018-2-6 11:52:46 | 显示全部楼层

谢谢分享
回复

使用道具 举报

2

主题

73

帖子

345

积分

终身VIP会员

Rank: 6Rank: 6

积分
345
发表于 2018-5-18 09:27:17 | 显示全部楼层
学习中、 谢谢分享
回复 支持 反对

使用道具 举报

11

主题

67

帖子

405

积分

终日乾乾

Rank: 3Rank: 3

积分
405
发表于 2018-5-18 12:51:20 | 显示全部楼层
学习,学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋| ( 蜀ICP备16014681号

GMT+8, 2018-8-18 10:14 , Processed in 0.097713 second(s), 25 queries .

Powered by www.nxopen.cn

© 2001-2013 nxopen.cn

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