C++实现已知直线两点,求直线外一点和直线的垂直交点的通解

一、已知直线两点可求直线方程

已知直线两点(x1,y1)和(x2,y2)则

(x-x1)/(x2-x1)=(y-y1)/(y2-y1)

二、已知直线外一点,求垂点

相互垂直的两条线斜率相乘等于-1

K1×K2=-1

则可求得
x = (x1y2 / (x2 - y1) - y1(x2 / (x2 - x1)) - x3*(x1 - x2) / (y2 - y1) + y3) / ((y2 - y1) / (x2 - x1) - (x1 - x2) / (y2 - y1));

y = ((x - x1) / (x2 - x1))*(y2 - y1) + y1;

三、C++实现

C++实现部分代码:

POINT_XY pos(POINT_XY pos1, POINT_XY pos2, POINT_XY pos3)
{
	POINT_XY pos;

	if (pos1.x == pos2.x)
	{
		pos.x = pos1.x;
		pos.y = pos3.y;
	}
	else if (pos1.y == pos2.y)
	{
		pos.x = pos3.x;
		pos.y = pos1.y;
	}
	else
	{
		pos.x = (pos1.x * pos2.y / (pos2.x - pos1.y) - pos1.y * (pos2.x / (pos2.x - pos1.x)) - pos3.x * (pos1.x - pos2.x) / (pos2.y - pos1.y) + pos3.y) / ((pos2.y - pos1.y) / (pos2.x - pos1.x) - (pos1.x - pos2.x) / (pos2.y - pos1.y));
		pos.y = ((pos.x - pos1.x) / (pos2.x - pos1.x)) * (pos2.y - pos1.y) + pos1.y;
	}
	std::cout << "pos1.x:" << pos.x << std::endl;
	std::cout << "pos1.y:" << pos.y << std::endl;

	return pos;
}

C++实现完成示例代码:

#include <math.h>
#include <iostream>

class POINT_XY
{
public:
	float x;
	float y;
};
POINT_XY pos(POINT_XY pos1, POINT_XY pos2, POINT_XY pos3);

int main()
{
	//示例

	POINT_XY POS0;
	POINT_XY pos1;
	POINT_XY pos2;
	POINT_XY pos3;
	pos1.x = 0;
	pos1.y = 0;
	pos2.x = 1;
	pos2.y = 1;
	pos3.x = 3;
	pos3.y = 0;
	POS0 = pos(pos1, pos2, pos3);
	return 0;


}
POINT_XY pos(POINT_XY pos1, POINT_XY pos2, POINT_XY pos3)
{
	POINT_XY pos;

	if (pos1.x == pos2.x)
	{
		pos.x = pos1.x;
		pos.y = pos3.y;
	}
	else if (pos1.y == pos2.y)
	{
		pos.x = pos3.x;
		pos.y = pos1.y;
	}
	else
	{
		pos.x = (pos1.x * pos2.y / (pos2.x - pos1.y) - pos1.y * (pos2.x / (pos2.x - pos1.x)) - pos3.x * (pos1.x - pos2.x) / (pos2.y - pos1.y) + pos3.y) / ((pos2.y - pos1.y) / (pos2.x - pos1.x) - (pos1.x - pos2.x) / (pos2.y - pos1.y));
		pos.y = ((pos.x - pos1.x) / (pos2.x - pos1.x)) * (pos2.y - pos1.y) + pos1.y;
	}
	std::cout << "pos1.x:" << pos.x << std::endl;
	std::cout << "pos1.y:" << pos.y << std::endl;

	return pos;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值