计算几何
克莉丝汀娜
此时一名自称平民的玩家路过
展开
-
SGU 110 Dungeon
题意:http://hi.baidu.com/hpfdf/item/4bc71df5cc9f3dc4a835a2a9 纯粹的数学题。初始一看非常麻烦,但是仔细思考后,其实并不复杂。需要注意一些细节。 1、用对称式的空间直线方程(一个点,一个空间向量)来表示入射光线,然后与球的方程联立方程组,求出比例系数t1,t2,再由系数求出直线与球的交点。需要注意的是:如果表示入射光线的点为起点的话,这原创 2015-03-22 16:38:38 · 438 阅读 · 0 评论 -
51nod 1265 四点共面
利用四点组成构成的三个向量的混合积为0来判断是否共面。 #include #include typedef struct { double x,y,z; }P; P p[5]; double mul(P a,P b){return a.x*b.x+a.y*b.y+a.z*b.z;} P del(P a,P b) { P ans; ans.x=a.x-b.x,an原创 2015-04-04 20:57:05 · 603 阅读 · 0 评论 -
51nod 1298 圆与三角形
#include #include #include using namespace std; struct P { double x,y; }; struct circle { P c; double r; }; int cmp(double x) { if(fabs(x)<1e-15) return 0; if(x>0) return原创 2015-04-02 22:44:51 · 999 阅读 · 0 评论 -
hdu 1007 Quoit Design (最近点对)
题目大意:给出n件玩具坐标,制作一个圆环,使得其半径尽可能大,并且最多只能够圈中其中一件玩具。求此时的半径。 问题的本质就是求最近点对。方法是二分法。 #include #include #include #define N 100005 using namespace std; typedef double db; struct P{ db x,y; }p[N],pt[N];原创 2015-04-18 15:22:18 · 365 阅读 · 0 评论 -
51nod 1264 线段相交
写得很复杂,还好一遍过了。 方法是直接根据线段两点,得到直线方程,联立方程组求交点,然后看交点是否在两线段之间。注意平行、位于同一直线时的情况就可以了。 肯定还有更好的方法。有时间会补上。 #include using namespace std; #define LL long long struct P { double x,y; }; int cmp(double x)原创 2015-04-05 22:54:08 · 79 阅读 · 0 评论 -
hdu 5206 Four Inages Strategy
题目大意:给出空间中四个点的坐标,问能否构成一个正方形。注意,这里的点坐标为整数。 由于点坐标为整数,因此可以直接算出由四点组合成的六条边的边长。判断是否有四条相等,另外两条相等(对角线)且其平方为前四条的平方的两倍。 如果这里给出的坐标不是整数,则需要考虑异面的情况。即还得判断对角线是否共面。 #include #include #include #include #include原创 2015-04-19 16:52:49 · 510 阅读 · 0 评论 -
552D Vanya and Triangles (求任意三点组成的三角形个数)
太暴力了。 #include using namespace std; struct P{ int x,y; }p[2005]; int gcd(int x,int y) {return y?gcd(y,x%y):x;} bool check(int i,int j,int k){ int x1,x2,y1,y2; x1=p[i].x-p[j].x,x2=p[j]原创 2015-06-23 21:07:14 · 883 阅读 · 0 评论 -
SGU 120 Archipelago (向量旋转)
给出n正多边形的两个顶点坐标n1,n2,求其余顶点坐标。 1、先求出中心坐标C。 2、根据中心坐标C和初始的一个顶点,进行一定角度的旋转,依次求出其他顶点。 对于1:由两点n1,n2(不妨设n2>n1)和中心可形成一个三角形,已知两点坐标,可求该三角形的一边长y以及其它两边与中心所形成的夹角a=2π/n*(n2-n1),另外两个角相等,设为B,亦可求矣。 然后根据余弦定原创 2015-03-26 22:29:51 · 440 阅读 · 0 评论