两条线段求交点

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;
}

如有误,请指出,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值