数学模板

给两条直线顶点坐标  求两条直线是否相交

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  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. }  



欧拉函数

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //直接求解欧拉函数    
  2. int euler(int n){ //返回euler(n)     
  3.      int res=n,a=n;    
  4.      for(int i=2;i*i<=a;i++){    
  5.          if(a%i==0){    
  6.              res=res/i*(i-1);//先进行除法是为了防止中间数据的溢出     
  7.              while(a%i==0) a/=i;    
  8.          }    
  9.      }    
  10.      if(a>1) res=res/a*(a-1);    
  11.      return res;    
  12. }    
  13.     
  14. //筛选法打欧拉函数表     
  15. #define Max 1000001    
  16. int euler[Max];    
  17. void Init(){     
  18.      euler[1]=1;    
  19.      for(int i=2;i<Max;i++)    
  20.        euler[i]=i;    
  21.      for(int i=2;i<Max;i++)    
  22.         if(euler[i]==i)    
  23.            for(int j=i;j<Max;j+=i)    
  24.               euler[j]=euler[j]/i*(i-1);//先进行除法是为了防止中间数据的溢出     
  25. }    



求两条线段(直线)的交点

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. double cross(double x1, double y1, double x2, double y2)  
  2. {  
  3. return x1 * y2- x2* y1;  
  4. }  
  5. void intersec(point a, point b, point c, point d, double* x, double* y)  
  6. {  
  7. double u = cross(d.x- a.x, d.y- a.y, b.x- a.x, b.y- a.y);  
  8. double v = cross(c.x- a.x, c.y- a.y, b.x- a.x, b.y- a.y);  
  9. double w = u- v;  
  10. *x= (u*1.0* c.x- v*1.0* d.x)/ (w*1.0);  
  11. *y= (u*1.0* c.y- v*1.0* d.y)/ (w*1.0);  
  12. }  

圆周率计算代码

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  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. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目:使用 JavaScript 编写的杀死幽灵游戏(附源代码) 杀死鬼魂游戏是使用 Vanilla JavaScript、CSS 和 HTML 画布开发的简单项目。这款游戏很有趣。玩家必须触摸/杀死游荡的鬼魂才能得分。您必须将鼠标悬停在鬼魂上 - 尽量得分。鬼魂在眨眼间不断从一个地方移动到另一个地方。您必须在 1 分钟内尽可能多地杀死鬼魂。 游戏制作 这个游戏项目只是用 HTML 画布、CSS 和 JavaScript 编写的。说到这个游戏的特点,用户必须触摸/杀死游荡的幽灵才能得分。游戏会根据你杀死的幽灵数量来记录你的总分。你必须将鼠标悬停在幽灵上——尽量得分。你必须在 1 分钟内尽可能多地杀死幽灵。游戏还会显示最高排名分数,如果你成功击败它,该分数会在游戏结束屏幕上更新。 该游戏包含大量的 javascript 以确保游戏正常运行。 如何运行该项目? 要运行此游戏,您不需要任何类型的本地服务器,但需要浏览器。我们建议您使用现代浏览器,如 Google Chrome 和 Mozilla Firefox。要玩游戏,首先,单击 index.html 文件在浏览器中打开游戏。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值