一、问题求解

空间直线同球体交点问题求解,为求解二元二次方程问题,下面是求解过程

二、代码实现

1、代码实现

 1 void cal_q ( double par_x, double par_y, double par_z, double par_r, double bpx, double bpy, double bpz, double spx, double spy, double spz ) {
 2     double x_1, x_2, y_1, y_2, z_1, z_2;
 3
 4     if ( bpx != spx ) {
 5         double k_xy = ( spy - bpy ) / ( spx - bpx );
 6         double b_xy = bpy - k_xy * bpx;
 7
 8         double k_zx = ( spz - bpz ) / ( spx - bpx );
 9         double b_zx = bpz - k_zx * bpx;
10
11         double A = 1 + k_xy * k_xy + k_zx * k_zx;
12         double B = 2 * k_xy * ( b_xy - par_y ) + 2 * k_zx * ( b_zx - par_z ) - 2 * par_x;
13         double C = par_x * par_x + ( b_xy - par_y ) * ( b_xy - par_y ) + ( b_zx - par_z ) * ( b_zx - par_z ) - par_r * par_r;
14
15         x_1 = ( -B + sqrt ( B * B - 4 * A * C ) ) / ( 2 * A );
16         y_1 = k_xy * x_1 + b_xy;
17         z_1 = k_zx * x_1 + b_zx;
18
19         x_2 = ( -B - sqrt ( B * B - 4 * A * C ) ) / ( 2 * A );
20         y_2 = k_xy * x_2 + b_xy;
21         z_2 = k_zx * x_2 + b_zx;
22
23         printf ( "x_1: %10.5f   y_1: %10.5f   z_1: %10.5f \n", x_1, y_1, z_1 );
24         printf ( "x_2: %10.5f   y_2: %10.5f   z_2: %10.5f \n", x_2, y_2, z_2 );
25
26         printf ( "bpx != spx \n" );
27     } else {
28         if ( bpy != spy ) {
29             double k_zy = ( spz - bpz ) / ( spy - bpy );
30             double b_zy = spz - k_zy * spy;
31
32             double A = 1 + k_zy * k_zy;
33             double B = 2 * k_zy * ( b_zy - par_z ) - 2 * par_y;
34             double C = par_y * par_y + ( b_zy - par_z ) * ( b_zy - par_z ) + ( bpx - par_x ) * ( bpx - par_x ) - par_r * par_r;
35
36             x_1 = bpx;
37             y_1 = ( -B + sqrt ( B * B - 4 * A * C ) ) / ( 2 * A );
38             z_1 = k_zy * y_1 + b_zy;
39
40             x_2 = bpx;
41             y_2 = ( -B - sqrt ( B * B - 4 * A * C ) ) / ( 2 * A );
42             z_2 = k_zy * y_2 + b_zy;
43
44             printf ( "x_1: %10.5f   y_1: %10.5f   z_1: %10.5f \n", x_1, y_1, z_1 );
45             printf ( "x_2: %10.5f   y_2: %10.5f   z_2: %10.5f \n", x_2, y_2, z_2 );
46
47             printf ( "bpx == spx && bpy != spy \n" );
48         } else {
49             if ( bpz != spz ) {
50                 x_1 = bpx;
51                 y_1 = bpy;
52                 z_1 = par_z + sqrt ( par_r * par_r - ( bpx - par_x ) * ( bpx - par_x ) - ( bpy - par_y ) * ( bpy - par_y ) );
53
54                 x_2 = bpx;
55                 y_2 = bpy;
56                 z_2 = par_z - sqrt ( par_r * par_r - ( bpx - par_x ) * ( bpx - par_x ) - ( bpy - par_y ) * ( bpy - par_y ) );
57
58                 printf ( "x_1: %10.5f   y_1: %10.5f   z_1: %10.5f \n", x_1, y_1, z_1 );
59                 printf ( "x_2: %10.5f   y_2: %10.5f   z_2: %10.5f \n", x_2, y_2, z_2 );
60
61                 printf ( "bpx == spx && bpy == spy \n" );
62             } else {
63                 printf ( "Warning: two points overlap !!!! \n" );64             }
65         }
66     }
67 }

2、测试

 1 #include <cstdio>
 2 #include <cmath>
 3
 4 void cal_q ( double, double, double, double, double, double, double, double, double, double );
 5
 6 int main() {
 7     double par_x = 20;
 8     double par_y = 20;
 9     double par_z = 20;
10     double par_r = 15;
11
12     double bpx = 20;
13     double bpy = 30;
14     double bpz = 40;
15
16     double spx = 20;
17     double spy = 20;
18     double spz = 20;
19
20     printf ( "bpx: %10.5f   bpy: %10.5f   bpz: %10.5f \n", bpx, bpy, bpz );
21     printf ( "spx: %10.5f   spy: %10.5f   spz: %10.5f \n", spx, spy, spz );
22
23     cal_q ( par_x, par_y, par_z, par_r, bpx, bpy, bpz, spx, spy, spz );
24
25     return 0;
26 }

3、图形显示测试结果

转载于:https://www.cnblogs.com/kljfdsa/p/9006708.html

空间直线同球体交点求解相关推荐

  1. 空间直线和三维物体之间的交线相关问题

    1.如何求空间直线在某一平面上的投影直线方程 https://zhidao.baidu.com/question/631349383625570644.html 2. 知道平面一点和平面法向量如何求平 ...

  2. 【转载】空间直线同任意形状椭球交点

    空间直线同空间中三维椭球相交,其交点即为空间直线方程同椭球方程的解,对于空间直线方程,只要知道两点空间坐标即可,而欧拉角不为零的三维椭球方程则较难描述,但可以考虑对椭球进行变换,使其欧拉角为零,进而转 ...

  3. C++求解圆心、半径、直线与圆交点

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 C++求解圆心.半径.直线与圆交点 前言 一.检测对象 二.检测方法 1.检测圆心和半径 2.求解直线与圆的交点 3.计算圆环残缺比例 ...

  4. pcl::lineToLineSegment() 计算空间直线的交点和最小公垂线

    对于两空间直线来说,计算交点和最小公垂线是一码事,交点即最小公垂线两个垂足的中心.PCL中源码中包含计算空间直线最小公垂线的函数 PCL_EXPORTS void pcl::lineToLineSeg ...

  5. 两相交的直线段夹角平分的直线上过交点距离为d的另一点求解公式

    两相交的直线段夹角平分的直线上过交点距离为d的另一点求解公式 问题描述: 已知p0,p1,pN三个点,p0到p1走向直线段,pN到p0走向直线段,相交于p0点, 则pN到p0到p1夹角为a,平分夹角为 ...

  6. 基于带约束S型加减速曲线的空间直线插补与空间圆弧插补算法(Matlab)

    写在前面 学习代码都记录在个人github上,欢迎关注~ Matlab机器人工具箱版本9.10 在前面的博文中: 基于抛物线过渡(梯形加减速)的空间直线插补算法与空间圆弧插补算法(Matlab) 基于 ...

  7. 0804空间直线及其方程-向量代数与空间解析几何

    文章目录 1 空间直线方程 1.1 空间直线的一般方程 1.2 空间直线的对称式方程 1.3 空间直线的参数方程 1.4 空间直线的两点式方程 3 两直线的夹角 4 直线与平面的夹角 4.1 定义 4 ...

  8. 求圆和直线之间的交点

    求圆和直线之间的交点 /*** 求圆和直线之间的交点* 直线方程:y = kx + b* 圆的方程:(x - m)² + (x - n)² = r²* x1, y1 = 线坐标1, x2, y2 = ...

  9. 8.4 向量应用(二)——空间直线

    本篇内容接上篇,还是关于向量应用的内容.没有废话,直接来. 空间直线方程 (一)点向式方程(对称式方程) 从名字上看,点向式两个关键,一个是点,一个是向,点是直线上一点,向是直线的方向,或者是和直线方 ...

  10. 机械臂控制软件,上位机软件 此机器人上位软件。 运动采用通用G代码指令编程,具有G5三维的空间圆弧插补,空间直线插补功能

    机械臂控制软件,上位机软件 此机器人上位软件. 运动采用通用G代码指令编程,具有G5三维的空间圆弧插补,空间直线插补功能,子程序编程功能,逻辑判断语句功能,示教编程功能(支持手柄),变量位置编程功能, ...

最新文章

  1. Linux 环境下/etc/profile和/etc/profile.d 的区别和用法!
  2. 工单系统的设计与实现(4)
  3. 【HDU - 1856】 More is better(并查集)(还需要空间优化。。)
  4. Python队列完成多进程间通信
  5. Ubuntu下如何使用虚拟机安装WindowsXP?(2)【转】
  6. select count(*) from返回值_MySQL 优化:count(1)真的比count(*)快吗
  7. Amoeba Architecture
  8. 时间格式转变 android,Android开发日期时间格式的转化
  9. sdX和hdX含义及其他安装Linux OS的总结
  10. 线性相位FIR数字滤波器的时域和频域特性
  11. 凡诺CMS 未授权访问+文件包含Getshell
  12. YF3-10L溢流阀的制造
  13. C++核心准则边译边学-不必惊慌!
  14. 岁月温柔-21 妈妈转到省医院第2天
  15. Action.c(17): Error -26374: The above not found error(s) may be explained by header and body byte
  16. fmri的图像数据在matlab中显示,利用imagesc工具进行显示,自带数据集-by 西南大学xulei教授...
  17. 4.21 检查SSN
  18. MacBook Pro(13 英寸,2011 年末)A1278安装Windows11蓝屏代码WDF_VIOLATION问题解决
  19. 怀旧服大脚插件未能从服务器,大脚插件问题
  20. python读取目录下所有的jpg文件,并显示第一张图片

热门文章

  1. 嵌入式在生活中的应用
  2. 怎么才能够坚持做一件事并且把它做好?
  3. 应对风险和机会的措施讲解
  4. 回溯算法原理及其应用场景
  5. 2019主流的前端框架
  6. java 设置excel宽度_javaexcel如何设置指定列宽
  7. OpenStack安装CentOS镜像:Device eth0 does not seem to be present, delaying initialization
  8. 命里有时终须有,命里无时莫强求
  9. Android用浏览器打开pdf文件
  10. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx