一、已知直线两点可求直线方程
已知直线两点(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;
}