计算几何求直线与交点

求直线解析式

给出直线上两点的坐标,求直线的解析式。

设两点坐标分别为(x1,y1),(x2,y2)(x_1,y_1),(x_2,y_2)(x1,y1),(x2,y2),解析式为ax+by+c=0ax+by+c=0ax+by+c=0

则直线斜率为y2−y1x2−x1\dfrac{y_2-y_1}{x_2-x_1}x2x1y2y1

−ab=y2−y1x2−x1-\dfrac{a}{b}=\dfrac{y_2-y_1}{x_2-x_1}ba=x2x1y2y1

那么a=y2−y1,b=x1−x2a=y_2-y_1,b=x_1-x_2a=y2y1,b=x1x2

(x1,y1)(x_1,y_1)(x1,y1)代入ax+by+c=0ax+by+c=0ax+by+c=0,得c=x2y1−x1y2c=x_2y_1-x_1y_2c=x2y1x1y2

{a=y2−y1b=x1−x2c=x2y1−x1y2\left\{\begin{matrix}a=y_2-y_1\\b=x_1-x_2\\ c=x_2y_1-x_1y_2\end{matrix}\right.a=y2y1b=x1x2c=x2y1x1y2

code

struct point{
	double x,y;
};
double a,b,c;
void gt(point v1,point v2){
	a=v2.y-v1.y;
	b=v1.x-v2.x;
	c=v2.x*v1.y-v1.x*v2.y;
}

求交点

给出两条直线的解析式,求交点。

设两条直线的解析式为{a1x+b1y+c1=0a2x+b2y+c2=0\left\{\begin{matrix}a_1x+b_1y+c_1=0\\a_2x+b_2y+c_2=0 \end{matrix}\right.{a1x+b1y+c1=0a2x+b2y+c2=0

一式两边同时乘a2a_2a2,二式两边同时乘a1a_1a1

{a1a2x+a2b1y+a2c1=0a1a2x+a1b2y+a1c2=0\left\{\begin{matrix}a_1a_2x+a_2b_1y+a_2c_1=0\\a_1a_2x+a_1b_2y+a_1c_2=0 \end{matrix}\right.{a1a2x+a2b1y+a2c1=0a1a2x+a1b2y+a1c2=0

一式减二式得(a2b1−a1b2)y+a2c1−a1c2=0(a_2b_1-a_1b_2)y+a_2c_1-a_1c_2=0(a2b1a1b2)y+a2c1a1c2=0

解得y=a1c2−a2c1a2b1−a1b2y=\dfrac{a_1c_2-a_2c_1}{a_2b_1-a_1b_2}y=a2b1a1b2a1c2a2c1

同理x=b1c2−b2c1a1b2−a2b1x=\dfrac{b_1c_2-b_2c_1}{a_1b_2-a_2b_1}x=a1b2a2b1b1c2b2c1


{x=b1c2−b2c1a1b2−a2b1y=a1c2−a2c1a2b1−a1b2\left\{\begin{matrix}x=\dfrac{b_1c_2-b_2c_1}{a_1b_2-a_2b_1}\\\\y=\dfrac{a_1c_2-a_2c_1}{a_2b_1-a_1b_2}\end{matrix}\right.x=a1b2a2b1b1c2b2c1y=a2b1a1b2a1c2a2c1


当然,要先判断两条直线是否平行。

若平行,则−a1b1=−a2b2-\dfrac{a_1}{b_1}=-\dfrac{a_2}{b_2}b1a1=b2a2,此时a1b2−a2b1=0a_1b_2-a_2b_1=0a1b2a2b1=0,上式分母为000

code

struct line{
	double a,b,c;
};
const double eps=1e-8;
double vx,vy;
bool find(point v1,point v2){
	if(fabs(v1.a*v2.b-v1.b*v2.a)<eps) return 0;
	vx=(v1.b*v2.c-v2.b*v1.c)/(v1.a*v2.b-v2.a*v1.b);
	vy=(v1.a*v2.c-v2.a*v1.c)/(v2.a*v1.b-v1.a*v2.b);
	return 1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值