几何公式

两条直线是否相交

 1 //叉积
 2 double mult(Point a, Point b, Point c)
 3 {
 4     return (a.x-c.x)*(b.y-c.y)-(b.x-c.x)*(a.y-c.y);
 5 }
 6
 7 //aa, bb为一条线段两端点 cc, dd为另一条线段的两端点 相交返回true, 不相交返回false
 8 bool intersect(Point aa, Point bb, Point cc, Point dd)
 9 {
10     if ( max(aa.x, bb.x)<min(cc.x, dd.x) )
11     {
12         return false;
13     }
14     if ( max(aa.y, bb.y)<min(cc.y, dd.y) )
15     {
16         return false;
17     }
18     if ( max(cc.x, dd.x)<min(aa.x, bb.x) )
19     {
20         return false;
21     }
22     if ( max(cc.y, dd.y)<min(aa.y, bb.y) )
23     {
24         return false;
25     }
26     if ( mult(cc, bb, aa)*mult(bb, dd, aa)<0 )
27     {
28         return false;
29     }
30     if ( mult(aa, dd, cc)*mult(dd, bb, cc)<0 )
31     {
32         return false;
33     }
34     return true;
35 }

圆周率计算代码

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int n;
 5     while(scanf("%d",&n)!=EOF&&n!=0)
 6     {
 7         int const N=7200;
 8         int const M=10000;
 9         int const  B=10000;
10         int const L=4;
11         int s[M/L];
12         int r1[N]= {0},r2[N]= {0},d1[N]= {0},d2;
13         int r3[N]= {0},r4[N]= {0},d3[N]= {0},d4;
14         int i,k,t,p=0,mp=M/L/20;
15         r1[0]=1;
16         r1[1]=3;
17         r3[0]=4;
18         printf("正在计算,请等待\n____________________\n");
19         for(k=0; k<M/L; ++k)
20         {
21             t=r1[0]*B;
22             d1[0]=t/0x5;
23             r1[0]=t%0x5;
24 //
25             t=r3[0]*B;
26             d3[0]=t/0xEF;
27             r3[0]=t%0xEF;
28             s[k]=d1[0]-d3[0];
29             int tag=0;
30             for(i=1; i<N; ++i)
31             {
32                 t=r1[i]*B+d1[i-1];
33                 d1[i]=t/0x19;
34                 r1[i]=t%0x19;
35                 t=r2[i]*B+d1[i];
36                 d2=t/(2*i+1);
37                 r2[i]=t%(2*i+1);
38 //
39                 t=r3[i]*B+d3[i-1];
40                 d3[i]=t/0xDF21;
41                 r3[i]=t%0xDF21;
42                 t=r4[i]*B+d3[i];
43                 d4=t/(2*i+1);
44                 r4[i]=t%(2*i+1);
45                 if(tag)
46                 {
47                     s[k]+=(d2-d4);
48                     tag=0;
49                 }
50                 else
51                 {
52                     s[k]+=(d4-d2);
53                     tag=1;
54                 }
55             }
56             if(p==mp)
57             {
58                 printf(">");
59                 p=0;
60             }
61             else
62                 p++;
63         }
64         for(i=M/L-1; i>=0; i--)
65         {
66             while(s[i]>=B)
67             {
68                 s[i-1]++;
69                 s[i]-=B;
70             }
71             while(s[i]<0)
72             {
73                 s[i-1]--;
74                 s[i]+=B;
75             }
76         }
77         printf("\npi=3.\n");
78         for(i=0; i<M/L; ++i)
79             printf("%d",s[i]);
80         printf("\n");
81     }
82     return 0;
83
84 }

求圆心

 1 void count(double x1,double y1,double x2,double y2,double x3,double y3)
 2 {
 3     double a,b,c,d,e,f;
 4     a=2*(x2-x1);
 5     b=2*(y2-y1);
 6     c=x2*x2+y2*y2-x1*x1-y1*y1;
 7     d=2*(x3-x2);
 8     e=2*(y3-y2);
 9     f=x3*x3+y3*y3-x2*x2-y2*y2;
10     x=(b*f-e*c)/(b*d-e*a);
11     y=(d*c-a*f)/(b*d-e*a);
12     r=sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));
13
14 }
时间: 2024-10-26 17:38:05

几何公式的相关文章

ZOJ 3598 Spherical Triangle球面几何公式应用

#include <map> #include <set> #include <list> #include <cmath> #include <ctime> #include <deque> #include <stack> #include <queue> #include <cctype> #include <cstdio> #include <string> #inc

TZOJ--3939: FIFA World Cup 2006(几何公式)

3939: FIFA World Cup 2006 时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte 描述 Football is one of the most popular words in 2006. Bob cannot go to Germany for the FIFA world cup 2006 and can only watch the TV instead. As the following figure, height of

几何空间类型初探

之前一直做记录地点的坐标,都是使用一个lat 一个 long 的浮点型来计算.这样计算是有偏差的,所以尝试了一下GEOMETRY 的数据(另外一个更加贴切的地理类型是GEOGRAPHY,如果用来存坐标,其实使用起来比较类似,但是这次先不说) DECLARE @GEO1 GEOMETRY, @GEO2 GEOMETRY 从简单的说起,这里我定义了2个点,求出2个点的距离 SELECT @GEO1=GEOMETRY::STGeomFromText('POINT(1 1 1)',0), @GEO2=G

算法总结之几何模板

一 几何公式 三角形: 1. 半周长 P=(a+b+c)/2 2. 面积 S=aHa/2=absin(C)/2=sqrt(P(P-a)(P-b)(P-c)) 3. 中线 Ma=sqrt(2(b^2+c^2)-a^2)/2=sqrt(b^2+c^2+2bccos(A))/2 4. 角平分线 Ta=sqrt(bc((b+c)^2-a^2))/(b+c)=2bccos(A/2)/(b+c) 5. 高线 Ha=bsin(C)=csin(B)=sqrt(b^2-((a^2+b^2-c^2)/(2a))^2

as3 公式

AS3缓动公式:sprite.x += (targetX - sprite.x) * easing;//easing为缓动系数变量sprite.y += (targetY - sprite.y) * easing;AS3弹性公式:vx += (targetX - sprite.x) * spring;//spring为弹性系数vy += (targetY - sprite.y) * spring;sprite.x += (vx *= friction);//friction为摩擦力sprite.

AS3动画效果常用公式

缓动公式: sprite.x += (targetX – sprite.x) * easing;//easing为缓动系数变量 sprite.y += (targetY – sprite.y) * easing; 弹性公式: vx += (targetX – sprite.x) * spring;//spring为弹性系数 vy += (targetY – sprite.y) * spring; sprite.x += (vx *= friction);//friction为摩擦力 sprite

acm常见算法及例题

转自:http://blog.csdn.net/hengjie2009/article/details/7540135 acm常见算法及例题 初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法

基础不牢,地动山摇

这么多天过去了,即使自己步履蹒跚达到了一个短暂的小目标,但是自己的水平是怎样,自己比任何人都清楚. 我还是打算从头开始,按照知乎大神的步骤走上一次. 基本算法:1.枚举 1753 2965 2.贪心 1328 2109 2586 3.递归和分治法 4.递推 5.构造法 3295 6.模拟法 1068 1573 2993 2996 图算法: 1.图的深度优先遍历和广度优先遍历 2.最短路算法--多种 3.最小生成树算法 1789 2485 1258 3026 4.拓扑排序 1094 5.二分图最大

ACM算法总结及刷题参考

参考:http://bbs.byr.cn/#!article/ACM_ICPC/11777 OJ上的一些水题(可用来练手和增加自信)(poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094) 初期: 一.基本算法: (1)枚举. (poj1753,poj2965)    (2)贪心(poj1328,poj2109,poj2586)    (3)递归和分治法.     (4)递推.     (5)构造法.(po