狸猫的面试——项目描述——矢量裁剪
来源:互联网 发布:拜占庭将军问题 知乎 编辑:程序博客网 时间:2024/05/17 05:50
项目描述:
要求:在4s内,用单线程,完成对百万级的矢量图形的裁剪
输入:1.一个多边形(存储在XML文件中,顺序存储多边形所有的端点)
2.一个矢量图形(line或者circle)。line存储其两个端点AB,circle存储其圆心O和半径r。(实际有一百万条直线和一百万个圆)
输出:输出裁剪后的图形。例如
裁剪过程(以一条直线为例):
1.计算该直线与多边形的所有交点,并存储。
2.由交点拼凑成线段,然后计算该线段的中点是否在多边形内部
3.如果在则保留该线段
4.如果不在则删除该线段
详述:
在计算直线与多边形所有交点时,采用了定比分点法。
在由交点拼凑直线时,出现了如下问题
(a)中,交点的顺序应该是501234 但是实际存储的顺序是012345.这会使得将45也算做线段的情况。出现这种情况的原因是,求交点时,从多边形任意一条边开始,而不是靠近线段端点的那条边。
解决的办法:采用排序的方式,将交点到该直线A点的距离,一次排序。
关于定理:”线段一点在多边形内部,则线段在多边形内部“的证明:
证明:
先说明如何确定一点是否在多边形内部:
由该线段一点,向右做一条射线,则如果这条射线与多边形的交点为偶数个,则入点与出点保持一致。如果为奇数,则说明入点少一个(因为最后射线出了多边形的范围,所以不会少 出点)
假设,该线段不在多边形内部,但因其有一点在多边形内部,则该线段必然存在交点。但由上述内容可知,该线段不与多边形有交点,因此,上述定理成立。
结果:
0 0
- 狸猫的面试——项目描述——矢量裁剪
- 狸猫的面试——项目描述——视频通信
- 狸猫的面试——链表
- 狸猫的面试——JVM综述
- 狸猫的面试——JVM内存回收
- 狸猫的笔试——蛇形矩阵
- 狸猫的笔试——格雷码判断
- 狸猫的笔试——查找
- 狸猫的笔试——集合
- 狸猫的笔试——n位格雷码的生成
- 狸猫的笔试——字符转int
- Python mock测试static 方法——狸猫换太子
- 狸猫的笔试——镜像字符串(二叉树法)
- 面试中初级程序员常常遇到的问题—— 描述你做过的项目
- 矢量控制——SVPWM
- Arcengine+C#实现矢量数据的裁剪
- 关于Activity的描述————Android面试总结(1)
- 图片裁剪的使用——拼图游戏
- java基础————安卓开发新手的前提
- 使用GitHub Pages+ Jekyll搭建个人博客
- OpenCV2.4.9源码分析——Support Vector Machines
- HDU 5677 ztr loves substring
- Android 的三种依赖注入库
- 狸猫的面试——项目描述——矢量裁剪
- 学习笔记之深入浅出MFC 第8章 C++重要特性----静态变量(static)
- HDU 2586 LCA转RMQ
- java设计模式-Builder创建者模式
- 使用SQLite五大原因
- 从语言与二进制之间的关系
- Android Studio 进阶详细配置
- AS添加Genymotion问题汇总
- 经典SQL练习题4----面试题及相关知识