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

唐康林NX二次开发论坛

 找回密码
 立即注册
搜索
热搜: nxopen ufun
查看: 197|回复: 2

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

[复制链接]

416

主题

527

帖子

2078

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2078
发表于 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

帖子

11

积分

小学生

Rank: 1

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

使用道具 举报

0

主题

7

帖子

621

积分

大学生

Rank: 4

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

谢谢分享
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2018-2-20 23:38 , Processed in 0.091813 second(s), 27 queries .

Powered by www.nxopen.cn

© 2001-2013 nxopen.cn

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