书山有径勤为路>>>>>>>>

<<<<<<<<学海无涯苦作舟!

随笔分类 -  C 计算几何

如何计算三点面积
摘要:题目:http://acm.swust.edu.cn/oj/problem/848/代码:View Code #include "stdio.h"#include "string.h"#include "stdlib.h"#include "math.h"#include "iostream"#include "ctime"using namespace std;typedef struct node{ double x, y;}node;double Cal_Area(no 阅读全文

posted @ 2012-05-18 22:37 More study needed. 阅读(423) 评论(0) 推荐(0) 编辑

POJ 1113 凸包 graham
摘要:题目:http://poj.org/problem?id=1113大意:求出凸包的周长,再加上一个圆的周长就是本问题的答案。这个问题没有任何的难度,直接采用现成的模板就可以了。View Code #include "iostream"#include "cstdio"#include "cmath"#include "algorithm"using namespace std;const double PI=acos(-1.0);const int size=1005;const double eps=1e-8;s 阅读全文

posted @ 2011-11-15 21:51 More study needed. 阅读(233) 评论(0) 推荐(0) 编辑

凸包3——Graham算法
摘要:Graham的扫描是一个很优美的过程 用到的数据结构也很简单 仅仅是一个栈而已核心的思想是按照排好的序 依次加入新点得到新的边如果和上一条边成左转关系就压栈继续如果右转就弹栈直到和栈顶两点的边成左转关系 压栈继续实现的时候我们不用存边 只需要含顺序在栈里存点 相邻两点就是一条边由于我们时时刻刻都保证栈内是一个凸壳所以最后扫描完毕 就得到了一个凸包下面还是继续上面的那个样例 演示一下栈扫描的过程这样Graham扫描算法基本完成复杂度是排序O(Nlog2N) 扫描O(N){每个点仅仅出入栈一次}合起来是一个O(Nlog2N)的算法 很优秀 阅读全文

posted @ 2011-11-15 20:53 More study needed. 阅读(302) 评论(0) 推荐(0) 编辑

凸包2——Graham算法
摘要:1.点集排序为了得到加入新点的顺序 Graham扫描法的第一步是对点集排序排序是对杂乱的点集进行了梳理这也是这种算法能够得到更高效率的根本原因排序的方法也有两种极角坐标排序(极角序)和直角坐标排序(水平序)前者好理解一些 但是在实现的时候 后者更方便先说极角序 为了极角排序 我们先得得到一个参考点一般的 我们取最左边(横坐标最小)的点作为参考点如果有多个这样的点就取最下面的(纵坐标最小)看这样一个例子 这是一个任意给出的平面点集:参考点的定义:在横坐标最小的情况下取纵坐标最小的点所以所有的点只能在这个黄色的半平面中 而且正上方为闭(可取得) 正下方为开(不可取)这就决定了参考点的性质:点集中任 阅读全文

posted @ 2011-11-15 20:40 More study needed. 阅读(484) 评论(0) 推荐(0) 编辑

凸包1——卷包裹算法
摘要:有了向量 我们就可以选取一个最外侧的点了利用向量 我们可以比较哪个点"更外侧"比如点K和点I 我们利用向量JK乘以向量JI得到一个数 这个数应该是负数 说明I比K更外侧两个向量的比较具有传递性所以我们可以像N个数里取最大的数一样取出最外侧的遍历所有点 每个点都和现有最外侧的点比较 得到新的最外侧的点至此两个问题都得以解决 我们可以写出满足一般要求的卷包裹算法了两个问题如下:1.怎么确定一个肯定在凸包上的点?这个问题很好解决 取一个最左边的也就是横坐标最小的点如果有多个这样的点 就取这些点里 纵坐标最小的这样可以很好的处理共线的情况2.如何确定下一个点(即最外侧的点)?我们需 阅读全文

posted @ 2011-11-15 20:23 More study needed. 阅读(424) 评论(0) 推荐(0) 编辑

叉乘(九)——点到线段的最近点
摘要:计算点到线段的最近点: 如果该线段平行于X轴(Y轴),则过点point作该线段所在直线的垂线,垂足很容易求得,然后计算出垂足, 如果垂足在线段上则返回垂足,否则返回离垂足近的端点; 如果该线段不平行于X轴也不平行于Y轴,则斜率存在且不为0。 设线段的两端点为pt1和pt2,斜率为:k = ( pt2.y - pt1. y ) / (pt2.x - pt1.x ); 该直线方程为:y = k* ( x - pt1.x) + pt1.y。 其垂线的斜率为 - 1 / k,垂线方程为:y = (-1/k) * (x - point.x) + point.y 。 联立两直线方程解得:x ... 阅读全文

posted @ 2011-11-15 20:02 More study needed. 阅读(1059) 评论(0) 推荐(0) 编辑

叉乘(八)——拆线、多边形、矩形是否在多边形内?
摘要:只要是了解了叉乘(七)里面的内容,这个就十分的简单了。 判断折线是否在多边形内:只要判断折线的每条线段是否都在多边形内即可。设折线有m条线段,多边形有n个顶点,则该算法的时间复杂度为O(m*n)。 判断多边形是否在多边形内:只要判断多边形的每条边是否都在多边形内即可。判断一个有m个顶点的多边形是否在一个有n个顶点的多边形内复杂度为O(m*n)。 判断矩形是否在多边形内:将矩形转化为多边形,然后再判断是否在多边形内。 阅读全文

posted @ 2011-11-15 19:44 More study needed. 阅读(385) 评论(0) 推荐(0) 编辑

叉乘(七)——线段是否在多边形内?
摘要:判断线段是否在多边形内: 线段在多边形内的一个必要条件是线段的两个端点都在多边形内,但由于多边形可能为凹,所以这不能成为判断的充分条件。 如果线段和多边形的某条边内交(两线段内交是指两线段相交且交点不在两线段的端点), 因为多边形的边的左右两侧分属多边形内外不同部分,所以线段一定会有一部分在多边形外(见图a)。 于是我们得到线段在多边形内的第二个必要条件:线段和多边形的所有边都不内交。 线段和多边形交于线段的两端点并不会影响线段是否在多边形内; 但是如果多边形的某个顶点和线段相交,还必须判断两相邻交点之间的线段是否包含于多边形内部(反例见图b)。 因此我们可以先求出所有和线段相交... 阅读全文

posted @ 2011-11-15 19:35 More study needed. 阅读(1331) 评论(0) 推荐(1) 编辑

叉乘(六)——点在多边形内吗?
摘要:用途6:判断点P是否在多边形中是计算几何中一个非常基本但是十分重要的算法。以点P为端点,向左方作射线L,由于多边形是有界的,所以射线L的左端一定在多边形外,考虑沿着L从无穷远处开始自左向右移动,遇到和多边形的第一个交点的时候,进入到了多边形的内部,遇到第二个交点的时候,离开了多边形,……所以很容易看出当L和多边形的交点数目C是奇数的时候,P在多边形内,是偶数的话P在多边形外。 但是有些特殊情况要加以考虑。 如图下图(a)(b)(c)(d)所示。 在图(a)中,L和多边形的顶点相交,这时候交点只能计算一次; 在图(b)中,L和多边形顶点的交点不应被计算; 在图(c)和(d) 中,L... 阅读全文

posted @ 2011-10-28 10:33 More study needed. 阅读(607) 评论(0) 推荐(0) 编辑

叉乘(五)——点、线、多边形、圆在矩形中吗?
摘要:1.点: 只要判断该点的横坐标和纵坐标是否夹在矩形的左右边和上下边之间。2.线段、折线、多边形: 因为矩形是个凸集,所以只要判断所有端点是否都在矩形中就可以了。3.矩形: 只要比较左右边界和上下边界就可以了。4.圆: 很容易证明,圆在矩形中的充要条件是: 圆心在矩形中且圆的半径小于等于圆心到矩形四边的距离的最小值。 阅读全文

posted @ 2011-10-28 10:08 More study needed. 阅读(389) 评论(0) 推荐(0) 编辑

叉乘(四)——线段与直线相交吗?
摘要:用途4:明白了用途3以后,再来看用途4那是相当的简单呀。如果线段P1P2和直线Q1Q2相交,则线段P1P2跨立直线Q1Q2,即:( P1 - Q1 ) × ( Q2 - Q1 ) * ( Q2 - Q1 ) × ( P2 - Q1 ) >= 0。没错,就是这么的简单,不用怀疑什么。 阅读全文

posted @ 2011-10-28 09:57 More study needed. 阅读(410) 评论(0) 推荐(0) 编辑

叉乘(三)——线段与线段相交吗?
摘要:用途3:我们现在的任务就是判断线段P1P2和线段Q1Q2是否相交。我们分两步确定两条线段是否相交: (1)快速排斥试验 设以线段 P1P2 为对角线的矩形为R, 设以线段 Q1Q2 为对角线的矩形为T, 如果矩形R和矩形T不相交,显然两线段不会相交。 (2)跨立试验 如果两线段相交,则两线段必然相互跨立对方。 若P1P2跨立Q1Q2 ,则矢量 ( P1 - Q1 ) 和( P2 - Q1 )位于矢量( Q2 - Q1 ) 的两侧, 即1.(P1 - Q1) x (Q2 - Q1)<0, 这个式子表明Q1Q2在P1Q1的右方,也就是说P1Q1在Q1Q2的... 阅读全文

posted @ 2011-10-28 00:24 More study needed. 阅读(837) 评论(0) 推荐(0) 编辑

叉乘(二)——点在线段上吗?
摘要:用途2:其实这个还是用的叉乘的性质,“左边还是右边”,只不过这个在线上,也就是说是性质的第三条。设点为Q,线段为P1、P2 ,判断点Q在该线段上的依据是:1.( Q - P1 ) × ( P2 - P1 ) = 0;2.Q 在以 P1,P2为对角顶点的矩形内第一点是为了保证Q点在直线P1P2上,第二点是为了保证Q点不在线段P1P2的延长线或反向延长线上对于第二点这一步骤的判断可以用以下过程实现: ON-SEGMENT(pi,pj,pk) //pk就是要判断的点了,pi,pj就是线段的两个端点。 if min(xi,xj) <= xk <= max(xi,xj) and m 阅读全文

posted @ 2011-10-27 23:49 More study needed. 阅读(426) 评论(0) 推荐(0) 编辑

叉乘+二分解决POJ 2398
摘要:DescriptionMom and dad have a problem: their child, Reza, never puts his toys away when he is finished playing with them. They gave Reza a rectangular box to put his toys in. Unfortunately, Reza is rebellious and obeys his parents by simply throwing his toys into the box. All the toys get mixed up, 阅读全文

posted @ 2011-10-21 19:41 More study needed. 阅读(291) 评论(0) 推荐(0) 编辑

叉乘+二分解决POJ 2318
摘要:DescriptionCalculate the number of toys that land in each bin of a partitioned toy box.Mom and dad have a problem - their child John never puts his toys away when he is finished playing with them. They gave John a rectangular box to put his toys in, but John is rebellious and obeys his parents by si 阅读全文

posted @ 2011-10-20 22:43 More study needed. 阅读(443) 评论(0) 推荐(0) 编辑

叉乘(一)——左边还是右边
摘要:用途1: 众所周知,叉乘是用来计算面积的,但是是什么样的面积呢?设两个矢量P(x1, y1), Q(x2, y2); 那么P x Q=x1*y2 - x2*y1的结果是一个标量,表示的就是以(0,0), p1, p2和p1+p2构成的平行四边形。其实个人觉得这个用途不是很大,更有用的是它的一个有趣的性质,也就是它的第二个用途了。用途2: 叉乘的一个非常重要的性质是:可以通过它的符号来判断两矢量相互之间的逆顺的关系。 (1). P x Q > 0; 表示P在Q的顺时针方向; (2). p x Q < 0; 表示P在Q的逆时针方向; (3). P x Q = 0; 表示P和Q是共线的, 阅读全文

posted @ 2011-10-20 20:37 More study needed. 阅读(1012) 评论(0) 推荐(0) 编辑

什么是叉乘,用它我们可以做什么?
摘要:什么是叉乘呢,它表示什么含义呢?答:叉乘有什么用呢?(用来求三角形的面积)答:我们以二维的情况为例来说明,其实三维的时候也是同样的道理。但是在使用上式求面积的时候要注意用fabs取绝对值。有了面积我们可以做什么?(求内接圆半径,求外接圆半径)答:除了求内接圆半径,我们可以求外接圆半径吗?答:可以:好了,这个就是叉乘了。但是,这个并不是叉乘的全部。我们还可以通过叉乘的结果的正负来判断一个点是在一点的左边还是右边。另外,我们还可以用它来进行更复杂的研究,也是凸包了。 阅读全文

posted @ 2011-10-20 13:36 More study needed. 阅读(2151) 评论(0) 推荐(0) 编辑

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

书山有径勤为路>>>>>>>>

<<<<<<<<学海无涯苦作舟!

点击右上角即可分享
微信分享提示