C++ 仿Unity Vector模板(随缘更新题解)
2021-03-29 00:44 作者:昵称不能为空voidf | 我要投稿
翻了差不多一个月Unity的C#的Vector2和Vector3,抄重构了一份自己的实现(
先上代码
特性
可以用cout cerr 直接输出Vector2和Vector3
基本上直接对接Unity官方文档,可以参阅https://docs.unity3d.com/550/Documentation/ScriptReference/Vector3.html
对于三维向量,增加了经纬度转换支持
可以在开头的using FLOAT_ = 处指定精度
N维向量还在施工中
先上一篇题解:https://codeforces.com/contest/1468/problem/G

题目大意:给定一条高低不平的二维山路,太阳在第n个点之上H高度处,你需要求出从第一个点走到第n个点的过程中被太阳晒到的距离,忽略你的身高,山路如图以xi,yi的形式给出。
关键点:想到极角排序
思路:我们考虑以太阳放出一条射线,逆时针扫过群峰,发现每个极值点可能会在前面扫过的点与后一个点之间的路径产生一个投影,这个投影是太阳会照到的地方与照不到的地方的交点。我们求出这个交点,与前一个点算一下距离然后加入答案中。

画图不难发现投影点的顺序与其与太阳连线的斜率有关
具体做法:将每个折线的点与太阳连线,算出这条线的斜率,并且依据斜率将点升序排序,然后遍历这些点,算出每条线段与下一个投影点的投影产生的贡献,一旦有贡献,将投影点之后的线段记为待处理线段,往后迭代。
细节:点与投影点与太阳共线时,要根据情况查看线段是否可以计入贡献。所以排序的第二关键字最好是x坐标。
模板代码: