P = A + AB*t
#include <iostream>
struct Point
{
int64_t x = 0;
int64_t y = 0;
Point(const int64_t& x1,const int64_t& y1):x(x1),y(y1){};
Point& operator=(const Point& other)
{
if (this != &other)
{
x = other.x;
y = other.y;
}
return *this;
}
Point operator-(const Point& p)
{
return Point(x - p.x,y-p.y);
}
Point operator+(const Point& p)
{
return Point(x + p.x,y+p.y);
}
Point operator*(const Point& p)
{
return Point(x * p.x,y*p.y);
}
Point operator/(const Point& p)
{
return Point(x / p.x,y/p.y);
}
};
void printPoint(const Point& p)
{
std::cout<<p.x<<" "<<p.y <<std::endl;
}
int64_t Cross2d(const Point& p,const Point& q)
{
return (p.x*q.y - q.x*p.y);
}
int main() {
Point A = {0,0};
Point B = {5,5};
Point C = {10,0};
Point D = {10,10};
Point AB = B - A;
Point CD = D - C;
Point AC = C - A;
float t = 0.0;
t = static_cast<float>(Cross2d(CD,AC)) / static_cast<float>(Cross2d(CD,AB));
if ((std::labs(t) <= 1e-14) || t >1) {
std::cout<<"null"<<std::endl;
}else
{
Point inter = A + Point{static_cast<int64_t>(AB.x*t),static_cast<int64_t>(AB.y*t)};
printPoint(inter);
}
return 0;
}
如有误,请指出,谢谢!