C++求直线方程并求直线延长线上的某点的算法

直线方程的几种形式

1一般式:Ax+By+C=0(A、B不同时为0)【适用于所有直线】

A1/A2=B1/B2≠C1/C2←→两直线平行
A1/A2=B1/B2=C1/C2←→两直线重合
横截距a=-C/A
纵截距b=-C/B

2:点斜式:y-y0=k(x-x0) 【适用于不垂直于x轴的直线】

表示斜率为k,且过(x0,y0)的直线

3:截距式:x/a+y/b=1【适用于不过原点或不垂直于x轴、y轴的直线】

表示与x轴、y轴相交,且x轴截距为a,y轴截距为b的直线

4:斜截式:y=kx+b【适用于不垂直于x轴的直线】

表示斜率为k且y轴截距为b的直线

5:两点式:【适用于不垂直于x轴、y轴的直线】

表示过(x1,y1)和(x2,y2)的直线

直线方程求解是一个相对简单的过程,使用的是斜截式方程,先考虑特殊情况,在用斜截式的方法替换就行,pt1和pt2为起点,nLen为延长的距离可为负数,Outpt为计算的延长的点。

#include <math.h>
typedef struct Point    //二维点结构
{DOUBLE x,y;Point(){x = 0;y = 0;}Point(DOUBLE xx,DOUBLE yy){x = xx;y = yy;}
}SDPoint;
BOOL ExPandLine(SDPoint pt1,SDPoint pt2,DOUBLE nLen,SDPoint& OutPt)
{if (pt1.x - pt2.x == 0){OutPt.x = pt1.x;if (pt1.y - pt2.y > 0){OutPt.y = pt2.y - nLen;}else{OutPt.y = pt2.y + nLen;}}else if (pt1.y - pt2.y == 0){OutPt.y = pt1.y;if (pt1.x - pt2.x > 0){OutPt.x = pt2.x - nLen;}else{OutPt.x = pt2.x + nLen;}}else{DOUBLE k = 0.0;DOUBLE b = 0.0;k = (pt1.y - pt2.y)/(pt1.x-pt2.x);b = pt1.y - k * pt1.x;DOUBLE zoom = 0.0;zoom = nLen/sqrt((pt2.x-pt1.x)*(pt2.x-pt1.x)+(pt2.y-pt1.y)*(pt2.y-pt1.y));if(k > 0){if (pt1.x-pt2.x > 0){OutPt.x = pt2.x - zoom * (pt1.x-pt2.x);OutPt.y = k*OutPt.x + b;} else{OutPt.x = pt2.x + zoom * (pt2.x-pt1.x);OutPt.y = k*OutPt.x + b;}}else{if (pt1.x-pt2.x > 0){OutPt.x = pt2.x - zoom * (pt1.x-pt2.x) ;OutPt.y = k*OutPt.x + b;} else{OutPt.x = pt2.x + zoom * (pt2.x - pt1.x);OutPt.y = k*OutPt.x + b;}}}return TRUE;
}

C++求直线方程并求直线延长线上的某点的算法相关推荐

  1. 向量叉乘求三维空间中两直线(或线段)的交点

    1.2D空间的直线相交 在二维空间中,利用两个直线方程y = kx + b我们可以直接计算出交点,但是这种方法麻烦了些,并且套用到三维空间用公式就更麻烦了,接下来介绍的是如何利用向量叉乘求出直线交点. ...

  2. 求空间两条直线之间的距离

    1. 前言 最近老板让写一段空间点匹配的代码, 其中涉及到求空间两直线之间的距离,写起来满费劲的, 这里做一个记录. 2. 处理思路 空间两直线之间的位置关系主要可以分为: 重合, 平行, 相交, 异 ...

  3. 已经两点求直线方程(多维空间)

    已知两点 p1(a1, b1, c1), p2 (a2, b2, c2)  求直线方程.        要求直线方程首先要理解直线是什么? 直线是一系列满足一定条件的点的集合. 多维空间下直线通用公式 ...

  4. python 求平面两点距离_Python求平面内点到直线距离的实现

    近期遇到个问题,需要计算平面内点到直线的距离,发现数学知识都还给老师了,度娘后找到计算方法,特此记录. 点到直线的计算公式: 通过公式推导,得到信息: A:直线斜率 B:固定值-1 C:直线截距b 转 ...

  5. 【计算几何】求三角面和直线交点

    需求: 对于给定的三角形面片3个顶点,和一条直线的2个点,求三角面和直线的交点,若无交点,输出-1. 思路: 利用海伦公式,可以得到三角形的面积,然后用3个点的2个向量,进行叉乘,得到面的法向量.ax ...

  6. 求关于一条直线的对称点

    已知直线l:a*x+b*y+c=0(a!=0,b!=0)点A(x1,y1),求点关于直线l的对称点A'. 可以设A'为(x,y),那么可知点((x1+x)/2, (y1+y)/2) )在直线l上,且过 ...

  7. python计算点到直线的距离_Python求平面内点到直线距离的实现

    近期遇到个问题,需要计算平面内点到直线的距离,发现数学知识都还给老师了,度娘后找到计算方法,特此记录. 点到直线的计算公式: 通过公式推导,得到信息: a:直线斜率 b:固定值-1 c:直线截距b 转 ...

  8. 求圆心到点的直线与圆的相交点

    求圆心到点的直线与圆的相交点 点B为圆上一动点,已知圆心O(x2,y2), 圆外点A(x1,y1),圆半径r值,求B(x,y)坐标. 由图可知,产生下面两个公式. m/n = y1-y2/x1-x2 ...

  9. 求5阶矩阵其对角线上所有元素之和

    1.代码如下: // test.cpp : Defines the entry point for the console application. // /* 输入一个5*5的矩阵,然后输出其对角线 ...

最新文章

  1. mouted能不能访问data中的数据_Vue(定时器)解决mounted不能获取到data中的数据问题...
  2. 初始化JQuery方法与(function(){})(para)匿名方法介绍
  3. c语言函数参数类型格式化,格式化输出的几种方法 主要介绍format函数的用法
  4. Spring3国际化和本地化
  5. 怎样去掉警告 log4j:WARN No appenders could be found for logger
  6. 【前端】vue Unknown custom element: xxxx did you register the component correctly
  7. java 去掉 t_[Java教程]LocalDateTime去掉T
  8. CStatic类的GDI双缓冲绘图
  9. k8s dashboard_ASP.NET Core on K8S深入学习(2)部署过程解析与部署Dashboard
  10. c语言自动化课题设计,自动化专业C语言程序设计课堂教学方案设计和实践.doc
  11. Hive表中加载数据的5中方式
  12. Sql优化总结!详细!(2021最新面试必问)
  13. LNK1123转换到COFF期间失败
  14. python图片标记_python提取那些被“标记”照片的实例详解
  15. Self-assessment Checklists of HSK
  16. nginx变量ngx.var
  17. transform 属性 实现3D立体相册
  18. 举个栗子~Tableau 技巧(211):学做指针环形图
  19. office 2016打开很抱歉此功能看似已中断并需要修复
  20. 下一代防火墙是什么 下一代防火墙产品有哪些

热门文章

  1. RootCause深度分析:为什么DCache常会导致LCD显示异常(数据一致性问题)
  2. Linux IIO驱动
  3. 睡眠质量不好怎么改善,失眠必备五款助眠好物
  4. 新版itunes不显示图书_App Store构建版本iTunes不显示
  5. 这本书中的程序员经典语句我都给你找出来了,请查收
  6. 详解多普达S1手机的WiFi设置(1)
  7. 智能电表跳闸怎么办?如何恢复供电
  8. sip java_An Introduction to the JAIN SIP API | Oracle 中国
  9. 信贷(Credit)
  10. 查看mysql操作日志