当前位置: 首页 > news >正文

环球资源网是卖什么的/郑州官网网站推广优化公司

环球资源网是卖什么的,郑州官网网站推广优化公司,响应式网站建设合同,网站开发 pdf 文字版前几天面试的时候被问到了,如何随机在三角形内生成点,我按照我的想法回答了一遍,但觉得回答的不够好。最后面试官说了一个最优的方法。觉得不错,顺带总结一下最近看到的一些关于计算机图形学方面的经典小题,知乎上看到…

前几天面试的时候被问到了,如何随机在三角形内生成点,我按照我的想法回答了一遍,但觉得回答的不够好。最后面试官说了一个最优的方法。觉得不错,顺带总结一下最近看到的一些关于计算机图形学方面的经典小题,知乎上看到的还有Leetcode上的

1.判断一个点是否在多边形内

首先先说一下输入的内容,多边形的顶点是一个数组输入进来,其中每个相邻点之间对应着多边形上有边相连

POINT p1=ptPolygon[i];

POINT p2 = ptPolygon[(i + 1) % nCount];

即上面两个点之间存在边相连

判断是否在凸多边形内部

这个方法我记得是在编程之美上看到的,即计算该点与多边形点之间向量的叉积,如果叉积同向则说明在内部,如果有反向则说明在外部。

810d97a6ce632abaae28c9a4f00b1cc9.png

比如上面这个图,分别计算PA→,PB→ 的叉积 PB,PC→ 的叉积 PC→,PA→的叉积

如果其都是同向的,则说明其在内部,如果不是同向的,则说明在外部。

这个算法复杂度是O(n)的,n是多边的顶点数

判断是否在任意多边形内部

一个经典的算法是射线法

从该点P出发向任意方向射出一条射线, 如果与多边形的边相交的数量为奇数个,则说明其在内部,如果相交个数为偶数个则在内部

一般为了计算方便就选择从P点向x轴向右方向上的射线,而判断相交只用求出交点的横坐标看起是否大于P.x的坐标就好

具体的算法实现见这个判断点是否在多边形内的算法和C语言程序

2.随机生成三角形内的点

这个是被面试官问到的题目,我的做法是先将三角形的外围用一个矩形给括起来,然后对矩形内的点进行随机采样,采样出来的点用上面1中的方法判断是否在三角形内。如果不在则继续采样。

面试官对此不是很满意,后来我想出来可以通过左边轴变换的方式进行,但是回答的也不好

最后面试官说了自己的方法:

734fbb75b43ea9169bf30a3d5b7c6cdc.png

网上找了一个图将就着看吧

其实这个方法也是坐标轴转换的思想,我之前想到的已经比较接近了,只不过没有往向量这块去考虑。

即由之前的xy坐标系转换为以三角形的两条边为基底的坐标系,如上图所示转换为OA→,OB→作为坐标的表示,所以OP→=tOA→+kOB→如果0

一个非常容易的易错点

这道题一个非常经典的易错思路是:比如上面的方法先随机生成t,然后再在(0,1-t)的区间内生成k点。

因为这种不随机:

比如假设t生成的结果非常接近于1,如果按照原始的方法则会出现大概率出现采样超过原来三角形的情况,而在这种采样的方式之下,必然会采样成功。

3.判断一个圆形和矩形是否相交

这道题是今天知乎上看到的:

怎样判断平面上一个矩形和一个圆形是否有重叠?

具体的算法也非常简单易懂,但是非常的巧妙。

我总结一下巧妙的地方在于:

先通过一个变换,将圆形变到了矩形的右上角,

通过向量,外加取最大值来巧妙的求得了圆形到矩形的最短距离【所以这个题目的简化版本可以用来求解圆形到矩形的最短距离】

4.判断两个矩形是否相交并求相交部分面积

Leetcode上有这道题:

223. Rectangle Area

我一开始的思路是,类比与上面那道题,将第二个矩形换到第一个矩形右上角,然后判断以第一个矩形右顶点为坐标原点时,第二个矩形的左下角是否落在了第三象限。这样用来判断是否相交还是不错的,但是求面积就不行了,比如如下的图

5a9ae684b5db71b3b9f12af25b2900d7.png

然后翻Leecode的discuss,底下最高票答案给的方法一时没看明白

int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {

int left = max(A,E), right = max(min(C,G), left);

int bottom = max(B,F), top = max(min(D,H), bottom);

return (C-A)*(D-B) - (right-left)*(top-bottom) + (G-E)*(H-F);

}

后来查到了另外一个人的博客,我觉得它讲的挺明白的: 判断两矩形是否相交

这道题本质上相当于求两个矩形相交区域的横纵坐标

int left = max(A,E);

int bottom = max(B,F);

这个是求得相交区域左下角的坐标的。如果不相交也是没有问题的

这个可以这么看,即两个矩形的左边和下面两条边做直线延长,然后得到的相交区域一定是一个矩形,然后上面求得的坐标就是这个矩形的右上角

同理,右边和上面四条边所在直线相交点的左下角为:

int right = min(C,G);

int top = min(D,H);

在判断一下以上两个坐标点的相对位置,如果第一个在第二个左下角的话,则能够构成矩形,如果不是这种情况则不能构成矩形。

http://www.lbrq.cn/news/753049.html

相关文章:

  • 网站建设走什么科目/百度百科推广费用
  • 小学校园门户网站建设/网站建设制作
  • 网站建设 行业资讯/百度百家自媒体平台注册
  • 手机网站制作系统/建网站平台
  • 厦门三五互联可以做网站吗/竞价托管外包费用
  • 海南网站建设网站开发/宁波网络推广平台
  • 昆山做网站找哪家好/网站出租三级域名费用
  • 北京建网站需要多少钱/百度sem推广具体做什么
  • wordpress怎么设置小图标/seo宣传
  • 做网站的书籍推荐/宁波网站推广联系方式
  • 如何做网站代理/域名注册查询阿里云
  • 海外高延迟服务器做网站/百度助手安卓版下载
  • 重庆江北区网站建设公司/沈阳今天刚刚发生的新闻
  • 做网站的人 优帮云/营销方案范文
  • pb 做网站/怎么注册自己的网址
  • 最新流行网站开发技术/网站建设苏州
  • 小网站建设/今日头条官网
  • 做网站要几天/企业网站营销的优缺点
  • 烟台网站建设-中国互联/国外免费源码共享网站
  • 网站如何提高流量/台州关键词优化推荐
  • 网站建设属于营业范围里的哪一项/学校网站建设
  • 深圳广东网站建设套餐/营销企业
  • 吉林系统建站怎么用/杭州seo网站哪家好
  • google 空间 网站/网站seo具体怎么做
  • 代做毕业设计网站/营销渠道管理
  • 廊坊seo整站优化软件/标题优化怎样选关键词
  • 阿里主机 wordpress/seo广告投放
  • Java做新闻网站/快速seo关键词优化方案
  • dede 网站图标/地推接单正规平台
  • 电子政务公开 网站建设/什么是友情链接?
  • Houdini 粒子学习笔记
  • 【Java web】HTTP 协议详解
  • 物联网(IoT)系统中,通信协议如何选择
  • 【深度学习计算性能】04:硬件
  • 入门概述(面试常问)
  • Mybatis学习笔记(二)