精华内容
下载资源
问答
  • 平面几何:两点确定一条直线

    千次阅读 2018-11-08 23:02:00
    不同点A,B确定一条直线,AB相同返回的值全0 直线方程:Ax+By+c=0 A = y2 - y1; B = x1 - x2; C = -Ax1 - By1 = x2y1 - x1y2; 证明之后补上; Line LineMake(Point A, Point B) { Line l; l.A = B.y - A.y; l.B...

    两个不同点A,B确定一条直线,AB相同返回的值全0

    • 直线方程:Ax+By+c=0
    • A = y2 - y1;
    • B = x1 - x2;
    • C = -Ax1 - By1 = x2y1 - x1y2;

    证明之后补上;

    Line LineMake(Point A, Point B)
    {
    Line l;
    l.A = B.y - A.y;
    l.B = A.x - B.x;
    l.C = B.x * A.y - A.x * B.y;
    return l;
    }

    展开全文
  • 平面上N点,每两点都确定一条直线, 求出斜率最大的那条直线所通过的两点(斜率不存在的情况不考虑)。时间效率越高越好。 平面上N点,每两点都确定一条直线,求出斜率最大的那条直线所通过的...
    平面上N个点,每两个点都确定一条直线,

    求出斜率最大的那条直线所通过的两个点(斜率不存在的情况不考虑)。时间效率越高越好。


    平面上N个点,每两个点都确定一条直线,求出斜率最大的那条直线所通过的两个点(斜率不存在的情况不考虑)。时间效率越高越好。
    关于这道题,网上已经给出了解答要点:
    3个点A,B,C,把它们的按x坐标排序。假设排序后的顺序是ABC,那么有两种情况:
    1.ABC共线,则k(AB)=k(BC)=k(AC)
    2.ABC不共线,则ABC将形成一个三角形,那么k(AC)<max(k(AB), k(BC))
    其中k()表示求斜率。
    所以程序的基本步骤就是:
    1.N个点按x坐标排序。
    2.遍历,求相邻的两个点的斜率,找最大值。
    时间复杂度Nlog(N)

     

    先把这些点按x坐标从小到大排序,斜率最大的两点必然是挨一起的两个点,所以排序O(n* lg n),遍历一次O(n)就够了

     

    本文出自:http://blog.csdn.net/jfkidear/article/details/8692079


    展开全文
  • /********************************************************.../*11、平面上N点,每两点都确定一条直线 *//************************************************************************/class Point{public:Point
    /************************************************************************/
    /*
    11、平面上N个点,每两个点都确定一条直线
    *//************************************************************************/class Point{public:Point(double valx = 0.0, double valy = 0.0):x(valx), y(valy){}double x;double y;};//求srcPt到直线的距离, 点在直线上方返回正值, 下方负值double distPointToLine(double k, Point& linePt, Point& srcPt){return (srcPt.y - linePt.y - k*(srcPt.x - linePt.x)) / sqrt(1 + k * k);}//方法一:O(n^2), 两个点之间分别求斜率,最后得到最大值double getK(const Point& lhs, const Point& rhs){if(abs(lhs.x - rhs.x) < 0.0000001)throw new exception("error");return (lhs.y - rhs.y) / (lhs.x - rhs.x);}bool findMaxK(Point * ptArr, int length, int& retPos1, int & retPos2){if(!ptArr || length < 2){retPos1 = -1;retPos2 = -1;return false;}double maxK = numeric_limits<double>::min();for(int i = 0; i < length; ++i){for(int j = i + 1; j < length; ++j){double k = getK(ptArr[i], ptArr[j]);if( k >= maxK){maxK = k;retPos1 = i;retPos2 = j;}}}return true;}//方法二:分治法,数组分成两半,左边区,右半区。//分别求最大斜率,然后在o(n)的时间内求出点分别在左半区和右半区的最大斜率//时间o(nlogn)double findMaxKRecursive(Point * ptArr, int l, int h, int& retPos1, int & retPos2){if(l >= h ){retPos1 = -1;retPos2 = -1;return 0;}if(l == h -1){retPos1 = l;retPos2 = h;return getK(ptArr[l], ptArr[h]);}int mid = (l + h) / 2;//求左半区int leftPos1, leftPos2;double leftK = findMaxKRecursive(ptArr, l, mid, leftPos1, leftPos2);//求右半区int rightPos1, rightPos2;double rightK = findMaxKRecursive(ptArr, mid + 1, h, rightPos1, rightPos2);//maxK为有效最大斜率double maxK = numeric_limits<double>::min();if(leftPos1 != -1){maxK = leftK;retPos1 = leftPos1;retPos2 = leftPos2;}if(rightPos1 != -1 && rightK > maxK){maxK = rightK;retPos1= rightPos1;retPos2 = rightPos2;}//O(n)时间求左右混合//左半区在直线(maxK,ptArr[l])最下方的点,即到直线距离最小值int minPos = l;double minDis = 0;for(int i = l + 1; i <= mid; ++i){double dis = distPointToLine(maxK, ptArr[l], ptArr[i]);if(dis < minDis ||(abs(minDis - dis) < 0.000001 && ptArr[i].x > ptArr[l].x)){minDis = dis;minPos = i;}}//右半区在直线(maxK,ptArr[mid+1])最上方的点,即到直线距离最大值int maxPos = mid + 1;double maxDis = 0;for(int i = mid + 2; i <= h; ++i){double dis = distPointToLine(maxK, ptArr[mid + 1], ptArr[i]);if(dis > maxDis ||(abs(maxDis - dis) < 0.000001 && ptArr[i].x < ptArr[l].x)){maxDis = dis;maxPos = i;}}double lrk = getK(ptArr[minPos], ptArr[maxPos]);if(lrk > maxK){retPos1 = minPos;retPos2 = maxPos;maxK = lrk;}return maxK;}int ptCompare(const void* lhs, const void * rhs){double ret = ((const Point *)lhs)->x - ((const Point *)rhs)->x;if(ret > 0)return 1;else if(ret < 0)return -1;elsereturn 0;}void testOfPoint(){const int size = 6;Point ptArr[size];ptArr[0] = Point(0, 0);ptArr[1] = Point(1, 2);ptArr[2] = Point(2,3);ptArr[5] = Point(2.5, 21);ptArr[3] = Point(3, 8);ptArr[4] = Point(4, 20);//排序qsort(ptArr, size, sizeof(Point), ptCompare);int pos1, pos2, pos3, pos4;findMaxK(ptArr, size, pos1, pos2);findMaxKRecursive(ptArr, 0, size - 1, pos3, pos4);cout << "(" << pos1 << "," << pos2 << ")" << " (" << pos3 << "," << pos4 << ")" << endl;}
    
    
    展开全文
  • /* 两不同点A,B确定一条直线,AB相同返回的值全0 * 直线方程:Ax+By+c=0 * A = y2 - y1; * B = x1 - x2; * C = -A*x1 - B*y1 = x2*y1 - x1*y2; */ Line LineMake(Point A, Point B) { Line l; l.A = B.y - ...


    /* 两个不同点A,B确定一条直线,AB相同返回的值全0
     *  直线方程:Ax+By+c=0
     *  A = y2 - y1;
     *  B = x1 - x2;
     *  C = -A*x1 - B*y1 = x2*y1 - x1*y2;
     */
    Line LineMake(Point A, Point B)
    {
    	Line l;
    	l.A = B.y - A.y;
    	l.B = A.x - B.x;
    	l.C = B.x * A.y - A.x * B.y;
    	return l;
    }


    展开全文
  • Unity求一条直线平面的交点

    千次阅读 2018-06-01 20:19:59
    已知一个平面上的一点P0法向量n,一条直线上的点L0方向L,求该直线与该平面的交点P如下图首先我们分析一下我们知道平面和直线的法向量,知道平面和直线上的一点,求直线与平面上的交点p。这里我们就要引入点积的...
  • 平面上N点,没两点都确定一条直线,求出斜率最大的那条直线所通过的两点(斜率不存在的情况不考虑)。时间效率越高越好。 先把N点按x排序。 斜率k最大值为max(斜率(point[i],point[i+1])) 0 复杂度...
  • 问题: 平面上N点,每两点之间可以确定一条直线,求出最大斜率。时间效率越高越好。 方法: 1. 先把N点按x排序。2. 斜率k最大值为max(斜率(point[i],point[i+1])) 0 <=i <n-2。 3. 复杂度Nlog(N) ...
  • 问n条直线最多把一个平面分成几?

    千次阅读 2009-11-15 11:27:00
    运用数学归纳法1条线分成2部分设已有(n-1)条线,分成m部分。...从1条直线算起:2+2+3+4+5+......+n= n(n+1)/2 +1第一2是“1条线分成2部分”的2,之后的2+3+4+...+n是每一条直线增加的区域。 一小孩
  • 2、遍历出所有取出两点的情况(不考虑先后顺序),根据任意两点都确定一条直线,直线参数为k斜率,b与y轴交点的纵坐标(此时x=0),将他们放入一列表中 3、将所有直线放入一集合并完成去重操作,增加直线的第三...
  • 【T3】 ...中文题目:在一个给定的n点的平面,找到在某条直线上的最多的点的数量。 大致思路: 给了你系列点,这会产生很多条直线,如何确定哪些直线上的点的数量听起来就令人头晕,但简化问题...
  • 题目给出二维平面上的n点,求最多有多少点在同一条直线上。 样例给出4点:(1, 2), (3, 6), (0, 0), (1, 3)。 一条直线上的点最多有3。 解决思路 ...两点可以确定一条直线,假设有一起始点P
  •  * 功能:在二维平面上,有两正方形,请找出一条直线,能够将这两正方形对半分。  * 假定正方形的上下两条边与x轴平行。  */ /** * 考虑: * 线的准确含义,可能性有: * 1)由斜率y轴截距确定; * ...
  • 最多有多少点在一条直线

    千次阅读 2015-09-14 17:15:32
    最多有多少点在一条直线
  • 紧接上篇:http://blog.csdn.net/yinhun2012/article/details/79444277这篇我们来看一下直线和平面在计算机中的数学表示,因为我们程序中不可能用笔和纸去画一个直线或者平面,我们只能通过函数或者向量组合表示...
  • n条直线最多能划分出多少个平面?

    千次阅读 2014-07-16 08:21:30
    首先来讨论种比较好的情况:
  • 思路对输入的点,两两组合求取斜率,这样可能会出现某斜率对应多对点。然后对属于同一斜率的多对点,当成幅图,求取连通分支数。这里对对属于同一斜率的多对点...那么实际上只有两条直线,(1,1),(2,2),(3,3)是连
  • //通过工具获得一条直线上3gps点: //gps1:41.770485 , 123.548133 //gps2:41.770537 , 123.548207 //gps3:41.770592 , 123.548287 //gps1与gps2距离:8.42米 gps2与gps3距离:9.06米  ...
  • 直线平面的交点

    万次阅读 2016-04-24 17:46:13
    如何求点到平面的交点今天遇到一个小问题,如何求点到平面的交点,并如何将其高效实现,下面就从数学的原理以及编程实现来探究一下这小问题。目录如何求点到平面的交点目录 问题重述与几何模型 数学分析 编程实现
  • 3. 仔细考虑怎么设计数据结构来表示一条线,选择都各有优劣,须权衡取舍 4. 不要假设斜率y轴截距是整数 5. 了解浮点表示法的限制,切记不要用==检查两浮点数是否相等,而应该检查两者差值是否小于某个极小值 ...
  • 问题重述与几何模型 已知P1(x1,y1,z1),P2(x2,y2,...可行性:已知直线上不重合两点,可以确定一条直线,已知直线与平面,则一定可以得到两者之间的关系。 向量法 当已知平面的一般式方程时(ax+by+cz+d=0),n⃗=(a,...
  • 设两条直线 L 1 : { A 1 x + B 1 y + C 1 z + D 1 = 0 A 2 x + B 2 y + C 2 z + D 2 = 0 L 2 : { A 3 x + B 3 y + C 3 z + D 3 = 0 A 4 x + B 4 y + C 4 z + D 4 = 0 L_{1}: \begin{cases} A_{1}x+B_{1}y+C_{1}z...
  • 我们都知道,两点可以确定一条直线,而且可以写成y = ax + b的形式,在一条直线上的点都满足这公式。所以这些给定点两两之间都可以算一斜率,每斜率代表一条直线,对每一条直线,带入所有的点看是否共线,并...
  • 齐次坐标在计算机图形学计算机视觉...表示二维向量空间,所以点也可以看做是一个二维向量。平面上点的齐次表示形式为,它对应于中的点。注意,齐次表示与非齐次表示不是一一对应关系,对任意非零,与表示的是中的...
  • 图中有一条直线AB,现在我们要做他的三等分点在平面内任取一点C,使C不在AB确定的直线上即可。然后连接AC,BC 取AC中点D,连接BD 然后取BD中点E,连接CE并延长与AB相交于F,则F就是AB的一三等分点。 当时高中的...
  • 在二维空间中对圆的拟合较为简单,由初中的几何知识我们可以知道,确定一个三角形至少需要三不共线的点,因此确定一个三角形的外接圆至少可用三点。我们不妨假设三点坐标为P1(x1,y1,z1),P2(x2,y2,...
  • 根据组点的坐标拟合空间平面,有两种方法 第种:如果在测量得到的数据中,x,y值都是确认没有误差的,而误差只是出现在z值上,则可以使用线性回归的方法,此方法最小二乘的目标是在z方向上de残差 Matlab 代码 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,699
精华内容 7,879
关键字:

一点和一条直线确定一个平面