C++ 实现已知直线上两个点求解直线方程,并求两条直线的交点

已知点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,谢谢~





C++ 中,如果你已经知道了两条直线的首尾两点 (PointA1, PointB1) 和 (PointA2, PointB2),计算这两条直线交点,即它们的平分线上的一个,通常需要找到它们斜率相等的情况。因为如果两条线平行,则没有交点;如果它们垂直,则交点就是两线段的中。 首先,你需要确定两条直线是否垂直。为此,计算每条直线的斜率: 对于第一条直线: ```cpp double slope1 = (PointB1.y - PointA1.y) / (PointB1.x - PointA1.x); ``` 对于第二条直线: ```cpp double slope2 = (PointB2.y - PointA2.y) / (PointB2.x - PointA2.x); ``` 然后判断斜率是否相等: ```cpp bool areParallel = abs(slope1 - slope2) < std::numeric_limits<double>::epsilon(); // 判断接近于0 ``` 如果 `areParallel` 为 true,说明两条直线平行,直接返回其中一条线的中作为“平分线”: ```cpp if (areParallel) { double midX = (PointA1.x + PointB1.x) / 2; double midY = (PointA1.y + PointB1.y) / 2; return {midX, midY}; // 返回中坐标 } ``` 如果斜率不相等,那么两条线有交点。可以将求解两个方程组的问题转化为一次消元法或者解析几何的方法。假设斜率不等于0,我们可以先转换成斜式公式找到两条直线交点 P(x, y): 设交点P(x, y),则有: - 对于直线1:y = slope1 * (x - PointA1.x) + PointA1.y - 对于直线2:y = slope2 * (x - PointA2.x) + PointA2.y 令这两个方程相等,解出 x: ```cpp double xIntersection = (slope2 * PointA1.x - slope1 * PointA2.x + PointA2.y - PointA1.y) / (slope1 - slope2); double yIntersection = slope1 * (xIntersection - PointA1.x) + PointA1.y; // 计算对应的y值 ``` 最后得到交点坐标 (xIntersection, yIntersection) 即为所的平分线上的
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值