• C++两直线交点MyPoint setpoint(Line &l,Line &m) { MyPoint p; p.x=(m.b-l.b)/(l.a-m.a); p.y=(l.a*m.b-m.a*l.b)/(l.a-m.a); return p; } 这的MyPoint p; 要加两个参数 而且不能直接用p.x p.y
• 经过图像处理，得到两直线方程，求两直线交点；void GetCrossPoint(float A1, float B1, float A3, float B3,int count,vector<Point2d>& cross_Pt) { int L1x0 = 1, L1x1 = 500, L3x0 = 1, L3x1 = 500; float L1...
经过图像处理，得到两直线方程，求两直线交点；
直线的一般方程为F(x) = ax + by + c = 0。既然我们已经知道直线的两个点，假设为(x0,y0), (x1, y1)，那么可以得到a = y0 – y1, b = x1 – x0, c = x0y1 – x1y0。
因此我们可以将两条直线分别表示为
F0(x) = a0*x + b0*y + c0 = 0, F1(x) = a1*x + b1*y + c1 = 0
那么两条直线的交点应该满足
a0*x + b0*y +c0 = a1*x + b1*y + c1
由此可推出
x = (b0*c1 – b1*c0)/D
y = (a1*c0 – a0*c1)/D
D = a0*b1 – a1*b0， (D为0时，表示两直线平行)

void GetCrossPoint(float A1, float B1, float A3, float B3,int count,vector<Point2d>& cross_Pt)
{
int L1x0 = 1, L1x1 = 500, L3x0 = 1, L3x1 = 500;   //像素坐标X上随便取两点
float L1y0 = A1*L1x0 + B1;                        //根据已知直线方程求对应的Y值
float L1y1 = A1*L1x1 + B1;
float L3y0 = A3*L3x0 + B3;
float L3y1 = A3*L3x1 + B3;
float a1 = L1y0 - L1y1;
float b1 = L1x1 - L1x0;
float c1 = L1x0*L1y1 - L1x1*L1y0;
float a3 = L3y0 - L3y1;
float b3 = L3x1 - L3x0;
float c3 = L3x0*L3y1 - L3x1*L3y0;
float D = a1*b3 - a3*b1;
double x = (b1*c3 - b3*c1) / D;
double y = (a3*c1 - a1*c3) / D;
Point2d tmp_pt;
tmp_pt.x = x;
tmp_pt.y = y;
cross_Pt.push_back(tmp_pt);
}
展开全文
• ** 两直线相同返回1, intersect_point为空 */ int Intersect(Line* another_line, Point* intersect_point); }; #endif //.c文件 #include "1.h" Point::Point() { x1 = 0; y1 = 0; } ...
百度知道上找的，先留着慢慢研究：
来源：http://zhidao.baidu.com/question/79460681.html
//.h文件
#ifndef _LINE_H_
#define _LINE_H_

#include <stdio.h>
#include <iostream.h>

class Point
{
public:
/* 点的坐标 */
int x1;
int y1;

public:
void SetXY(int x, int y);
void GetXY(int &x, int &y);

/* 2个构造函数 */
Point();
Point(int x, int y);
};

class Line : public Point /* line继承point */
{
public:
/* 另一个点的坐标 */
int x2;
int y2;

public:
void SetPoint(Point* point1, Point* point2);

/* 3个构造函数 */
Line();
Line(int x1, int y1, int x2, int y2);
Line(Point* point1, Point* point2);

/* 是否相交
** 相交返回0, 交点为intersect_point
** 不相交返回-1, intersect_point为空
** 两直线相同返回1, intersect_point为空
*/
int Intersect(Line* another_line, Point* intersect_point);
};

#endif

//.c文件
#include "1.h"

Point::Point()
{
x1 = 0;
y1 = 0;
}

Point::Point(int x, int y)
{
x1 = x;
y1 = y;
}

void Point::SetXY(int x, int y)
{
x1 = x;
y1 = y;
}

void Point::GetXY(int &x, int &y)
{
x = x1;
y = y1;
}

Line::Line()
{
x1 = 0;
x2 = 0;
y1 = 0;
y2 = 0;
}

Line::Line(int x1, int y1, int x2, int y2)
{
this->x1 = x1;
this->x2 = x2;
this->y1 = y1;
this->y2 = y2;
}

void Line::SetPoint(Point* point1, Point* point2)
{
x1 = point1->x1;
y1 = point1->y1;
x2 = point2->x1;
y2 = point2->y1;
}

Line::Line(Point* point1, Point* point2)
{
x1 = point1->x1;
y1 = point1->y1;
x2 = point2->x1;
y2 = point2->y1;
}

int Line::Intersect(Line* another_line, Point* intersect_point)
{
/* y = ax + b */
int a_my, b_my;
b_my = (x1 * y2 - y1 * x2) / (x1 - x2);
a_my = (y1 - y2) / (x1 - x2);

/* check if point */
Point* point = (Point*)another_line;
if(a_my * point->x1 + b_my == point->y1)
{
intersect_point = point;
return 0;
}

int a_other, b_other;
a_other = (another_line->x1 * another_line->y2 - another_line->y1 * another_line->x2) / (another_line->x1 - another_line->x2);
b_other = (another_line->y1 - another_line->y2) / (another_line->x1 - another_line->x2);

if(a_other == a_my)
{
if(b_my == b_other)
{
intersect_point = NULL;
return -1; //not intersect
}
else
{
return 1; //the same
}
}
else
{
intersect_point->x1 = ((b_other - b_my) / (a_my - a_other));
intersect_point->y1 = (a_my * intersect_point->x1 + b_my);
return 0; //intersect
}

}

/* test */
int main()
{
Point point1(0, 1);
Point point2(1, 2);

Line line1(0, 1, 1, 2);
Line line2(&point1, &point1);

Line po;
int a = line1.Intersect((Line*)&line2, &po);
if(a == 0)
{
cout<<"yes"<<endl;
cout<<"x = "<<po.x1<<", y = "<<po.y1<<endl;
}
else if(a == -1)
{
cout<<"no"<<endl;
}
else
{
cout<<"same"<<endl;
}

return 0;
}


展开全文
• 假设两直线的式子分别为： 求解过程: 综上所述，交点的解为： 则有解，否则两直线平行。 补充：如果化成Y=kX+b的形式的话，得解为： 例题：Audio 给定三个不共线的点，要求输出一个...
假设两直线的式子分别为：

$\left\{\begin{matrix} L1:A_{1}x + B_{1}y + C_{1} = 0 \\ L2:A_{2}x + B_{2}y + C_{2} = 0 \end{matrix}\right.$

求解过程:

$(1) L_{1} * A_{2} - L_{2} * A_{1}$

$L_{1} * A_{2} \Rightarrow A_{1} A_{2} x + A_{2} B_{1} y + A_{2} C_{1} = 0;$

$L_{2} * A_{1} \Rightarrow A_{1} A_{2} x + A_{1} B_{2} y + A_{1} C_{2} = 0;$

$L_{1} * A_{2} - L_{2} * A_{1} \Rightarrow A_{2} B_{1} y - A_{1} B_{2} y + A_{2} C_{1} - A_{1} C_{2} = 0$

$\Rightarrow y = (A_{1} C_{2} - A_{2} C_{1} ) / (A_{2} B_{1} - A_{1} B_{2}).$

$(2)L_{1} * B_{2} - L_{2} * B_{1}$

$L_{1} * B_{2} \Rightarrow A_{1} B_{2} x + B_{1} B_{2} y + B_{2} C_{1} = 0;$

$L_{2} * B_{1} \Rightarrow A_{2} B_{1} x + B_{1} B_{2} y + B_{1} C_{2} = 0;$

$L_{1} * B_{2} - L_{2} * B_{1} \Rightarrow A_{1} B_{2} x - A_{2} B_{1} x + B_{2} C_{1} - B_{1} C_{2} = 0$

$\Rightarrow x = (B_{2} C_{1} - B_{1} C_{2}) / (A_{2} B_{1} - A_{1} B_{2}).$

$(3)$ 综上所述，交点的解为：

$\left\{\begin{matrix} x = (B_{2} C_{1} - B_{1} C_{2}) / (A_{2}B_{1} - A_{1} B_{2}) \\ y = (A_{1} C_{2} - A_{2} C_{1}) / (A_{2} B_{1} - A_{1} B_{2}) \end{matrix}\right.$

$(A2 B1 - A1 B2) \neq 0$ 则有解，否则两直线平行。

补充：如果化成Y=kX+b的形式的话，得解为：

$\left\{\begin{matrix}x=(b_{2}-b_{1})/(k_{1}-k_{2}) \\ y = (k_{1}b_{2}-k_{2}b_{1})/(k_{1}-k_{2}) \end{matrix}\right.$

例题：Audio

给定三个不共线的点，要求输出一个点使得这个点到三个点的距离相同，输出保留三位小数。

#include<bits/stdc++.h>
using namespace std;

int main()
{
double x1,y1,x2,y2,x3,y3;
scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3);
double k1=(y1-y2)/(x1-x2),k2=(y1-y3)/(x1-x3);
k1=-1/k1,k2=-1/k2;
double x=(x1+x2)/2,y=(y1+y2)/2;
double b1=y-k1*x;
x=(x1+x3)/2,y=(y1+y3)/2;
double b2=y-k2*x;
double X=(b2-b1)/(k1-k2);
double Y=(k1*b2-k2*b1)/(k1-k2);
printf("%.3f %.3f\n",X,Y);

return 0;
}


展开全文
• 已知点A（x1，y1）、B（x2，y2）为直线L1上个点，点C（x3，y3）、D（x4，y4）为直线L2上个点，求解直线的方程以及交点坐标，直接贴代码 //定义Point2f结构体 struct Point2f { float x; float y; } // ...
已知点A（x1，y1）、B（x2，y2）为直线L1上两个点，点C（x3，y3）、D（x4，y4）为直线L2上两个点，求解两个直线的方程以及交点坐标，直接贴代码#include <iostream>

using namespace std;

//定义Point2f结构体
struct Point2f
{
float x;
float y;
};

// 定义直线参数结构体
struct LinePara
{
float k;
float b;

};

// 获取直线参数
void getLinePara(float& x1, float& y1, float& x2, float& y2, LinePara & LP)
{
double m = 0;

// 计算分子
m = x2 - x1;

if (0 == m)
{
LP.k = 10000.0;
LP.b = y1 - LP.k * x1;
}
else
{
LP.k = (y2 - y1) / (x2 - x1);
LP.b = y1 - LP.k * x1;
}

}

// 获取交点
bool getCross(float & x1, float &y1, float & x2, float & y2, float & x3, float &y3, float & x4, float & y4,  Point2f & pt){

LinePara para1, para2;
getLinePara(x1, y1, x2, y2, para1);
getLinePara(x3, y3, x4, y4, para2);

// 判断是否平行
if (abs(para1.k - para2.k) > 0.5)
{
pt.x = (para2.b - para1.b) / (para1.k - para2.k);
pt.y = para1.k * pt.x + para1.b;

return true;

}
else
{
return false;
}

}

void main()
{
Point2f pt1, pt2, pt3, pt4, pt;
pt1.x = 1.0;
pt1.y = 1.0;

pt2.x = 2.0;
pt2.y = 2.0;

pt3.x = 0.0;
pt3.y = 2.0;

pt4.x = 2.0;
pt4.y = 0.0;

getCross(pt1.x, pt1.y, pt2.x, pt2.y, pt3.x, pt3.y, pt4.x, pt4.y, pt);

cout << pt.x << " , " << pt.y << endl;
}直接来个完整版的，ctrl+F5，运行效果如下，打完收工！在这里感谢大佬给的建议，将int m改成double m，谢谢~
展开全文
• 求两任意直线（起点和端点）相交交点，不相交返回NULL，在WINXP，BCB6.0下面已经过N次测试
• 既然我们已经知道直线个点，假设为(x0,y0), (x1, y1)，那么可以得到a = y0 – y1, b = x1 – x0, c = x0y1 – x1y0。 因此我们可以将直线分别表示为 F0(x) = a0*x + b0*y + c0 = 0, F1(x) = a1*x + b1...
• 假设现在有一个点集，需要拟合出最能够表达点集轮廓的几条直线，并求直线之间的交点。 从点集中拟合直线可以采用的方法：随机抽样一致性（RANSAC）,霍夫变换（though transform） c++ 程序代码 /** @brief 计算直线...
• 最近在利用C++编写直线和圆相交求交点的方法，已知线段的端点坐标、圆的圆心坐标与圆的半径，利用直线方程和圆的方程联立求交点的思路。具体如下： （1）根据线段的端点，出线段的斜率k和截距b; （2）根据...
• 求两直线的关系，若相交求其交点 题解： #include<cstdio> #include<cmath> #include<string.h> #include<iostream> using namespace std; const int N=1e3+10; const ...
• 假设现在有一个点集，需要拟合出最能够表达点集轮廓的几条直线，并求直线之间的交点。从点集中拟合直线可以采用的方法：随机抽样一致性(RANSAC),霍夫变换(though transform)c++ 程序代码/** @brief 计算直线交点@...
• 00 本文内容问题描述图像输入输出数学公式推导三维坐标下直线的参数方程直线与球面交点求解方法判断距离是否与方向向量相同C++代码实现函数化封装可根据需要只修改函数参数特殊情况实际项目中遇到返回无效值当该点在...
• 问题：设ABC三点，形成...1. 已知求直线方程：A(x1,y1), B(x2,y2)，求直线Line(A-B)的一般直线方程 ax + by + c =0 设b=1，使用y=kx+n转换{-kx + y + (-n)=0;} a=-(y2-y1)/(x2-x1) c=-(x2y1-x1y2)/(x2-
• 他发现：把整个天空看做一个平面直角坐标系，飞行路径是所有过任意个端点的直线。 如果这些飞机可能会撞在一起，或者说只要这些直线交点，就可能发生事故。 在所有直线中应该最少删除多少条直线使得剩下的直线...
• 　给定直线，问直线是否重合，是否平行，或交点。 解题分析 　主要用叉积做，可以避免斜率被0除的情况。 　求交点P0: 已知P1 P2 P3 P4 　运用 P0P1 X P0P2 = 0 和P0P3 X P0P4 = 0 　C++ 用%.2lf ...
• 和一个求两直线交点的友元函数setpoint,要求考虑当两直线平行或交点坐标的绝对值大于等于10^8时，可抛出异常信息，并进行相应的处理。 实现代码如下： #include<iostream> #include<cmath> using...
• 定义SetPoint类，包含个Line类成员和一个表示直线交点的Point成员， 并定义类中求直线交点的成员函数。 编写每个类相应的成员函数和测试用的主函数。 代码如下：（仅供个人学习使用） {CSDN:CODE:235
• C++面向对象程序设计1 定义一个表示点的结构类型Point和一个由直线方程y=ax+b确定的直线类Line。 结构类型Point有两个成员xy，...友元函数SetPoint（Line &L，Line &L2）用于求两直线交点。 在main函数中，建立两个直
• 15.判断条直线是否相交及求直线交点 7 16.判断线段是否相交，如果相交返回交点 7 ㈢ 多边形常用算法模块 1. 判断多边形是否简单多边形 8 2. 检查多边形顶点的凸凹性 9 3. 判断多边形是否凸多边形 9 4. ...
• 本博客路面有效区域分割...进而求交点，包括用点式直线与图边缘交点（本例图分辨率为626×141），之后取ROI区域掩码图与原图合并得到最终分割结果。程序最后提供开运算效果与可变的二值化操作（包含二进制阈值...
• 一．问题分析我们知道，一次函数的图像是一条直线，其与坐标轴围成一个三角形，若要求这个“坐标三角形”的面积，则只要知道其与x轴，y轴的交点坐标...实例感悟(1)两线与一轴即有两条直线相交，分别求两直线与x轴，y...
• 今天给大家分享的是一道关于二次...直线y=15/8x-21/4与抛物线有交点，其中一个交点的横坐标是6，另一个交点是这条抛物线的顶点M．(1)这条抛物线的表达式．(2)动点P从原点O出发，在线段OB上以每秒1个单位长度...
• 某个Z平面截交一个立体模型，得到一系列交点 ...怎样用c++ 将这一系列的交点定义为一个封闭的轮廓线，，再用直线y=c(常量)去截这个轮廓线交点 (交点理论上是只有个点，因为轮廓线是凸的，封闭的)
• 交点，再取线段的较高端点的较小值h，（h-交点的y）为三角形的高。 三角形的宽即为（h带入条线段所在直线得到的横坐标的差值）。 三角形的面积即为雨水的量。 坑点：如果用G++提交，ans要加上eps才能过，...
• 在二维平面上计算出个由直线构成的矩形重叠后形成的总面积。 每个矩形由其左下顶点和右上顶点坐标表示，如图所示。 2.思路 只要把阴影部分的矩形面积出来就行 无非是求交点的坐标呗 显然 x1 就是A和E中的较大值...
• 4.6 求两个线段的交点 4.6.1 直线求交的应用：过三点的圆 4.7 直线和平面求交及裁剪 4.8 多边形求交问题 4.8.1 处理凸多边形和凸多面体 4.8.2 射线与凸多边形的交点以及裁剪问题 4.8.3 Cyrus-Beck裁剪算法 4.8.4 更...

c++ 订阅