poj 2704 Line of Sight(数学型计算几何)

该博客主要介绍了POJ 2704题目的解题思路,涉及计算几何问题。题目要求根据房子和路的坐标,以及多个障碍物的位置,计算避开障碍物后从路上能看到房子的最远距离。解题过程中,需要对障碍物和房子进行连线投影,并对投影结果排序。博主分享了在实现过程中遇到的困难,如障碍物和路的纵坐标不会相同,以及投影可能超出路的范围等问题,这些问题导致了多次错误。最终,博主通过简化数据结构和优化算法找到了解决方案,尽管代码因此显得较为冗长。
摘要由CSDN通过智能技术生成

【题目大意】给出房子的坐标表示为(x1,x2,y)代表房子所在二维坐标系上的位置,给出路的坐标表示(rx1,rx2,ry)同样表示路在二维坐标系上的位置。然后给出n个障碍物,每个障碍物的坐标表示是(a[i].x1,a[i].x2,a[i].y),问在路上避过障碍物可以连续的看到房子的最远距离是多少。


【解题思路】先对房子和障碍物进行连线构建投影,再按照投影得到在路上的坐标进行排序,最后取即刻。

                     哎,说起来很简单,写起来就....T_T....各种哭爹叫娘。

                     首先,障碍物跟房子和路都不会是同一个纵坐标;另外,投影可能会投影在路外面....足足wa了我8次,8次啊.....

                    刚开始开了线段这个结构体以为要用到,后来发现其实坐标点都没什么用,有用的还是横坐标而已~~懒得改回来了~程序就显得冗长一点。


【代码】:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>

using namespace std;

#define eps 1e-9

struct Point{
    double x,y;
    Point(){}
    Point(double a,double b){
        x=a,y=b;
    }
};

struct Line{
    Point a,b;
    Line() {}
    Line(Point x,Poi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值