1. 直线参数方程
    如果是在二维坐标系下,已知两个点p1(x1, y1), p2(x2, y2), 很容易求得两点之间的斜率,然后使用y = kx + b计算出k,b值得到直线方程。同理在三维空间下仍然可以使用直线参数方程。
    x = x1 + dx * t,
    y = y1 + dy * t,
    z = z1 + dz * t

    例如:
    已知p1(x1, y1, z1), p2(x2, y2, z2)个点,可以求得p1p2两个点的方向向量d。
    d = p2 - p1 = ((x2 - x1), (y2 - y1), (z2 - z1))。
    可以求得t = |d| / √d。

  2. c++代码求解方程
    a.首先定义点的结构

    struct Points3D
    {float x;float y;float z;
    };
    

    b . 计算两个点的方向向量

     void LinearEquation::GetDirection(float * Direction){Direction[0] = m_p2.x - m_p1.x;Direction[1] = m_p2.y - m_p1.y;Direction[2] = m_p2.z - m_p1.z;}
    

    c.然后计算向量模长

    float GetLength(float* Matrix)
    {float x = pow(Matrix[0], 2);float y = pow(Matrix[1], 2);float z = pow(Matrix[2], 2);return sqrt(x + y + z);
    }
    

    d.得到参数t以及dx,dy,dz,主要代码如下

    void GetEquationParameters(float& dx, float& dy, float& dz, float& t)
    {float Direction[3];GetDirection(Direction); ///得到两点的方向向量float L_D = GetLength(Direction); //得到方向向量的模长float std_D[3];memcpy(std_D, Direction, sizeof(Direction));GetNormVector(std_D);  //得到单位向量dx = std_D[0];dy = std_D[1];dz = std_D[2];float L_std_D = GetLength(std_D);t = L_D / L_std_D;  //t = |d| / √d;
    }
    

    e. 得到两点之间的所有点,interval代表采点的间隔。

    void GetLinearPoints(float interval, std::vector<Points3D>& points){float dx, dy, dz, t;GetEquationParameters(dx, dy, dz, t);for (int i = 0; i < int(m_NumPoints / interval); i++){float x = m_p1.x + dx * t * interval * i;float y = m_p1.y + dy * t * interval * i;float z = m_p1.z + dz * t * interval * i;float dis = sqrt(pow(m_p2.x - x, 2) + pow(m_p2.y - y, 2) + pow(m_p2.z - z, 2));if (dis < 1.0)break;Points3D pt;pt.x = x;pt.y = y;pt.z = z;points.push_back(pt);}}
    
  3. 使用VTK进行点绘制显示

    #ifndef INITIAL_OPENGL
    #define INITIAL_OPENGL#include <vtkAutoInit.h>
    VTK_MODULE_INIT(vtkRenderingOpenGL2)
    VTK_MODULE_INIT(vtkInteractionStyle)
    #endif  //不加这5行会报错#include "vtkPoints.h"
    #include "vtkSmartPointer.h"
    #include "vtkActor.h"
    #include "vtkCellArray.h"
    #include "vtkPolyData.h"
    #include "vtkPolyDataMapper.h"
    #include "vtkRenderer.h"
    #include "vtkRenderWindow.h"
    #include "vtkRenderWindowInteractor.h"
    #include "vtkProperty.h"void VtkDrawPoints(vector<Points3D> pt)
    {vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();vtkSmartPointer<vtkCellArray> vertices = vtkSmartPointer<vtkCellArray>::New();vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New();vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();vtkSmartPointer<vtkRenderer> render = vtkSmartPointer<vtkRenderer>::New();vtkSmartPointer<vtkRenderWindow> window = vtkSmartPointer<vtkRenderWindow>::New();vtkSmartPointer<vtkRenderWindowInteractor> win_render = vtkSmartPointer<vtkRenderWindowInteractor>::New();int Num = pt.size();for (int i = 0; i < Num; i++) {vtkIdType id = points->InsertNextPoint(pt[i].x, pt[i].y, pt[i].z);vertices->InsertNextCell(1);vertices->InsertCellPoint(id);}polydata->SetPoints(points);polydata->SetVerts(vertices);mapper->SetInputData(polydata);actor->SetMapper(mapper);actor->GetProperty()->SetColor(255, 0, 0);actor->GetProperty()->SetPointSize(2);render->AddActor(actor);render->SetBackground(0, 0, 0);window->AddRenderer(render);window->SetSize(600, 600);win_render->SetRenderWindow(window);win_render->Initialize();win_render->Start();
    }
    

完整代码可以访问此链接c++求空间直线方程并使用vtk进行绘制显示。

(c++)已知空间三维两个点坐标,得到直线方程以及两点之间所有的点,使用VTK进行绘制显示相关推荐

  1. 已知空间一点到另外两点直线的距离

    转自:http://www.cnblogs.com/clarkustb/archive/2008/11/04/1326500.html 已知空间一点到另外两点直线的距离 设空间中的三点为M1,M2,M ...

  2. 已知空间圆弧曲线的两点以及圆心半径,用matlab画出圆弧

    已知空间圆弧曲线的两点以及圆心半径,用matlab画出圆弧. 两点坐标:p1 = (p1(1),p1(2),p1(3));p2 = (p2(1),p2(2),p2(3));圆心坐标:c=(c(1),c ...

  3. 已知空间中的三点 求三角形面积_高考数学复习突破策略,空间几何体的结构及其表面积、体积...

    [考试要求] 1.利用实物.计算机软件等观察空间图形,认识柱.锥.台.球及简单组合体的结构特征,能运用这些特征描述现实生活中简单物体的结构: 2.知道球.棱柱.棱锥.棱台的表面积和体积的计算公式,能用 ...

  4. 已知空间中的三点 求三角形面积_各类几何体的体积与表面积的计算问题

    考纲原文 了解球.棱柱.棱锥.台的表面积和体积的计算公式. 知识点详解 一.柱体.锥体.台体的表面积 1.旋转体的表面积 2.多面体的表面积 多面体的表面积就是各个面的面积之和,也就是展开图的面积. ...

  5. 已知空间中的三点 求三角形面积_【气宇轩昂】解三角形最值问题的四大模型尤其是第四种模型,简直不要太赞哦!!!...

    点击上方蓝色字体"高中数学王晖"关注王晖老师,免费获取各种知识干货和学习经验~~~您的点赞转发是对老师的最大鼓舞~~~ 距高考还有262天 1 三角函数有界性 在三角函数中,正弦函 ...

  6. 已知物体的两个坐标 计算移动方向 - python

    1.已知条件 在直角平面坐标中,我们已知两个坐标点的位置,即物体的上一时刻位置(x1,y1) 和 此时位置(x2,y2) , 想要知道 该物体的移动方向(直角坐标系的360°角),该如何计算? 2.解 ...

  7. matlab x y 坐标,已知(x,y,z)坐标,如何用matlab作三维曲线?

    答:输入下面的语句 >> A=[0,150,0;0,100,-2.20;0,50,-4.85;0,0,-7.3;0,-50,-5.10;0,-100,-2.75;0,-150,0; 300 ...

  8. 已知空间中的三点 求三角形面积_角平分线性质中的一些演变思路

    有部分答案(初中学生,学习中的数学问题,我们可以在评论区留言,有时间我会回复的. 两个目的: 一是希望对开始数学不理想,现在想学的好数学的学生提供一个帮助 一是发发文章 此讲义适合有一些基础的学生(初 ...

  9. 已知空间中的三点 求三角形面积_三角形的面积公式八叙

    本文将给出一些使用解析几何和向量表达的三角形面积公式.我们将三角形放置在二维平面坐标系中, 并设其三点坐标为 , , ,如下图所示: 我们采用构造已知图形面积的方法来求解未知图形面积的方法,所以我们在 ...

最新文章

  1. 任正非签发最新电邮:过去我们是为了赚点小钱,现在是要战胜美国
  2. 多层科目任意组合汇总报表的性能优化 (上)
  3. 应用调试(四)系统调用SWI
  4. 测试 Zoundry Raven
  5. [VSCode插件推荐] REST Client: 也许是比Postman更好的选择
  6. linux中删除文件命令
  7. 操作系统锁的实现方法有哪几种_Java并发之Monitor实现
  8. [软件更新]迅雷v5.9.8.1084发布
  9. 零基础搭建完全免费个人静态博客
  10. 漂白水增稠剂看似木讷,其实在专注于分析罢了
  11. 计算机行知行业英语教材,“三教”改革的先声——《行知行业英语》
  12. BigDecimal 往左移动两位小数_妻子的浪漫旅行:对比之下,这两位妻子拍照超“甜蜜”,亲疏立见...
  13. OCP认证体系大揭秘
  14. ANO V7上位机协议程序(新版加入DMA形式发送接收)
  15. [eNSP]解决路由器以及交换机一直处于##,无法启动的问题
  16. 微信小程序能给花店带来哪些作用_分享花店微信小程序开发优势
  17. DJ3-3 进程调度
  18. Java航班预订统计leetcode_1109
  19. 笔记:单轴上的动量守恒
  20. 重装系统服务器不识别u盘,重装系统时BIOS不识别U盘启动盘如何解决?

热门文章

  1. 常用的四种大数据分析方法
  2. python的标准类型内建模块有_python的常用内建模块与常用第三方模块
  3. 《一个陌生女人的来信》茨威格
  4. Web前端与移动开发学习路线图
  5. 【测试甩锅大攻略】产品出了问题,谁都不想担这个责任,那么锅由谁来背呢?
  6. Windows折腾之路 兼谈纯净强迫情节
  7. 21 【styled-components的使用】
  8. 解决layui表格排序与后台数据返回顺序不一致
  9. python ceil函数的使用
  10. 单向冻结一般72小时解冻吗_支付宝余额宝冻结资金怎么解开,里面的钱能不能拿出来...