catalog

  • Base
  • 模板
  • 模板2

Base

当:斜率k可能是小数  或  截距b可能是小数时其实,我们仍可以用double来存直线!!但是需要设置一个eps精度!! 只要小于误差,就当做是:double值相同
' 注意, 垂直线的斜率 不存在!! 所以,对垂直线(甚至平行线k==0)的 都特殊处理 '   vector< pair<double, double> > A;A.PB( {k, b} );   ' 放入:斜率 和 截距 'sort(A.begin(), A.end());for(i, 0, n-1, 1){if(i == 0) ++ ans;else{if( DB_EQUAL(A[i].FIR, A[i-1].FIR) &&DB_EQUAL(A[i].SEC, A[i-1].SEC)continue;++ ans;} // DE_EQUAL(a,b){  return fabs(a-b) <= EPS; }' 1, 两个double的差,比eps还小。 说明,他俩可以看做是相同的 '' 2,  一定一定要注意(是&&的关系),不是(||)!!! '
'    {1, 1}  {1, 10}:  斜率相同,截距不同;  两个平行的直线 '
'       这不是一条直线 !!!    所以,是&&的关系!!    '

模板

有一个长度为w、高度为h 的矩阵,他的左下角 坐落在坐标系的[0,0]位置即,有(w+1)*(h+1)个二维坐标点,坐落在这个矩阵上你可以任意连接 其中的两个点,问一共有多少个不同的直线(所谓不同: 斜率 和 截距,均不同)
比如w = 1, h = 2
[a] [b]   ' 斜率=0:   [ef], [cd], [ab]  3条 '
[c] [d]   ' 斜率不存在:[ae], [bf]    2条 '
[e] [f]   ' 斜率>0:   [ed], [eb], [cb]  3条 '' 斜率<0:   [cf], [ad], [af]  3条 'ans = 111, double记录斜率和截距  (注意,斜率和截距 都可能是小数)
VE< pair<double, double> > A;
FOR(x1, 1, w + 1, 1){ FOR(y1, 1, h + 1, 1){FOR(x2, 1, w + 1, 1){FOR(y2, 1, h + 1, 1){if( (x1 == x2) || (y1 == y2) ) ' 特殊处理,水平和垂直线 'continue;double k = (double)(y2 - y1) / (double)(x2 - x1);double b = (double)y1 - k * x1;A.PB( {k, b} );}}}
}
sort(VE_ALL(A)); ' sort是为了, 方便找 两两相同的 '
int ans = w + 1 + h + 1;
int n = A.size();
FOR(i, 0, n-1, 1){if(i == 0) ++ ans;else{if( DB_EQUAL(A[i].FIR, A[i-1].FIR) &&DB_EQUAL(A[i].SEC, A[i-1].SEC){continue;}++ ans;}
}
注意, 上面的4个for,千万不要写成:   x2 >= x1  &&  y2 >= y1这是错的!!!
[2]      [1]    ' 你是想:  遍历了[1],没必要遍历[3] '[A]            '  这样想确实是正确的。 '
[3]      [4]    ' 但(x2>=x1  &&  y2>=y1): 他只是遍历的 [1]这个区域!! 即正斜率'' 还有: 负斜率!!!  即可以(x2>=x1) 让y遍历所有 '但没有必要!!! 这种优化完全没有必要!!!  不会有质的变化!! 2, 还有一种“暴力”的做法枚举(x1,y1) 和 (x2,y2): if(vis[(x1,y1)][(x2,y)]) continue;ans ++;_gcd = gcd( abs(x2-x1), abs(y2-y1) );   ' 这里 和 下一行, 是核心!!! 'X = (x2-x1) / _gcd, Y = (y2-y1) / _gcd;  ' 注意,这里没有abs!!'pair.PB( 获取所有的{x1 + k*X, y1 + k*Y} );  ' k可正负,而且无边界,你需要自己去break '' 即,pair里存的是:  位于(x1,y1)-(x2,y2)这条直线上的 所有的点。 '对pair进行二层循环, 将任意的两个点,都置为true

模板2

有很多的点,选择了2个点A和B找出所有的CDEF....点,处在A-B这条直线上方法1:  记录AB直线(但注意的是,AB直线垂直的情况 要特判!!!)I: A.x == B.x  特判II:   斜率k = (B.y - A.y) / (B.x - A.x)截距b = A.y - k * A.x然后,遍历所有的点T[xx, yy]根据当前T点的xx横坐标,放到{k, b}这个直线中可以得到一个should_y = xx * k + b然后,判断if(yy == should_y) 则说明 T点是合法的

记录二维直线的斜率和截距相关推荐

  1. 虎书学习笔记4:图形学基础数学(隐式二维直线、隐式二次曲线、二维参数曲线、二维参数直线、二维参数圆)

    关于图形学的基础数学知识 基础数学 隐式二维直线 我们最熟悉的直线:斜截式 他的隐式方程为: 我们再函数y-mx-b=0两边同乘一个系数,将得到一摸一样的直线. 因为两个点觉得一条直线,所以必然满足: ...

  2. OpenCV:Vec4f二维直线类型

    1. Vec4的参数本质 二维直线类型为cv::Vec4f,三维直线类型是cv::Vec6f, 输出参数的前半部分给出的是直线的方向,而后半部分给出的是直线上的一点(即通常所说的点斜式直线). Vec ...

  3. opencv判断 线夹角_opencv计算直线的斜率、截距,与水平线弧度值、角度值

    opencv计算直线的斜率.截距,与水平线弧度值.角度值 发布时间:2018-07-10 12:56, 浏览次数:1324 , 标签: opencv 1.输入一堆直线,返回每条直线的斜率和截距 斜率和 ...

  4. 二维直线拟合--opencv实现

    二维/三维直线拟合–opencv实现 ​ Hough变换可以提取图像中的直线,但是提取线的精度不高,然而我们的很多场合下需要精确估计直线的参数,这时就需要进行直线拟合. ​ 直线拟合的方法有很多,比如 ...

  5. 给定直线参数在二维散点数据上绘制直线(Python)

    声明: 仅个人小记 前言:遇到在二维散点图上绘制指定的直线,直线不是通过直接给出两个断点而是只给了直线的必要参数,进而需要基于散点数据计算出直线的两个端点,然后绘制出直线.方便以后使用,计算端点过程记 ...

  6. Java黑皮书课后题第8章:*8.31(几何:交点)编写一个方法,返回两条直线的交点。四个点存放在4*2的二维数组points中。编写一个程序,提示用户输入4个点,并显示交点

    *8.31(几何:交点)编写一个方法,返回两条直线的交点.四个点存放在4*2的二维数组points中.编写一个程序,提示用户输入4个点,并显示交点 题目 题目描述 破题 代码 本题运行实例 题目 题目 ...

  7. Java实现二维数组和稀疏数组的转换

    文章目录 稀疏数组 二维数组-->稀疏数组 稀疏数组-->二维数组 完整code 稀疏数组 简介:当编写的二维数组中存在很多不用的点但初始化时都赋值为0时,这个二维数组的观赏性很低并且非常 ...

  8. 减小程序规模!稀疏数组Sparsearray,数据结构二维数组与稀疏数组转换,Java实现

    文章目录 基本介绍 应用实例 基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组. 稀疏数组的处理方法是: ①记录数组一共有几行几列,有多少个不同的值(0除外) ...

  9. iOS原生实现二维码拉近放大

    http://www.cocoachina.com/ios/20180416/23033.html 2018-04-16 15:34 编辑: yyuuzhu 分类:iOS开发 来源:程序鹅 8 300 ...

最新文章

  1. Java8新特性-接口中的静态方法与默认方法
  2. 基于 Ubuntu 搭建微信小程序服务
  3. Java初学者推荐学习书籍free下载
  4. 使用Docker Compose 搭建lnmp
  5. eclipse下创建Maven项目
  6. Win Linux 双系统安装指南
  7. c52单片机c语言编程,c52单片机c语言编程怎样实现阴历查询
  8. eureka 集群失败的原因_对于注册中心,ZooKeeper、Eureka哪个更合适?
  9. dfs序七个经典问题(转)
  10. 例2.1 排序 - 九度教程第1题(排序)
  11. python time函数的功能_Python中Python时间模块的常用功能,Pythontime,函数
  12. ArcView GIS 应用与开发技术(9)- 创建空间数据
  13. 不加群提取群成员_快速提取PPT上的文字!
  14. SolidWorks导入3DSource零件库的模型方法介绍
  15. 多开助手完美版,APP一键多开,支持安卓10
  16. 《东周列国志》第五十二回 公子宋尝鼋构逆 陈灵公衵服戏朝
  17. mysql数据库加密存储过程_数据库系统(六)---MySQL语句及存储过程
  18. gitee 链接报错
  19. 在线上也能进行商标注册
  20. 聚类kmeans案例

热门文章

  1. helloWord执行过程
  2. 如何处理类别型特征?
  3. python 实现FTP上传下载文件
  4. 【OpenHarmony成长计划】#校园极客秀#碰一碰配网快速上手(附WSL编译环境搭建)
  5. CSDN浏览器插件使用教程及功能体验感触
  6. 乌班图(ubuntu)cmake,make编译时候报错。
  7. 派克Parker防爆伺服电机与普通伺服电机区别
  8. 软件测试项目该如何规避风险?
  9. word打印A4纸翻页小册子设置
  10. 大数据系列 -- 用户流失率计算