zoukankan      html  css  js  c++  java
  • 数学知识

       回忆一下初中数学,才发现自己并学到的东西很有限,初中的很多东西只是简单的涉及。最近又回到了初中的知识上,总结了一些在数学上自己发现和简单推理的东西。

    一、勾股定理

          很多人都知道勾股定理,也能够顺利的证明出来,毕竟课本上提供了很多用四边形证明的方法,不过如果给出一个圆和一个直角三角形,能证明吗?答案是肯定的,这个相信很多人在初中的时候就已经发现了(我是在学圆的时候偶然发现的)。

     

          在这个三角形中,我们设圆的半径为r,即EO=DO=FO=r,AC=a,BC=b,AB=c。

          我们都知道r可以用a、b、c表示出来,用面积法可以轻易得出r=ab/(a+b+c);利用圆的切线的性质可以轻易得出r=(a+b-c)/2。

         将这两个式子相等,可以推出a^2+b^2=c^2。并且在证明过程中没有用到与勾股定理有关的推论或者它本身,所以我们就可以把这个当做是一个正确的证明方法了。

    二、抛物线

       (1)、  不知道有多少人和我一样,在初中的学习中一直没有弄明白抛物线的定义,便开始使用了。到了高中,还是新华词典告诉我什么是抛物线:到定点和定直线的距离相等的点的集合。

         对于一条对称轴垂直于x轴的抛物线,我们可以进行一些下面简单的推论。

        我们先从反面进行验算:

             再把情况放的特殊点,设抛物线解析式y=ax^2+c(a<>0),那么我们就可以把定直线看做x轴,定点坐标为       M(0,2c)。设抛物线上的点坐标为P(t,at^2+c),s1为点P到x轴的距离,s2为线段PM的长度。s1=at^2+c,

    s2=(t^2+(2c-at^2-c)^2)^(1/2),中间的化简过程就不在写出了。s1^2=a^2t^4+c^2+2act^2,s2^2=(1-2ac)t^2+a^2t^4+c^2,比较s1和s2我们可以看到(1-2ac)t^2=2act^2   ∴c=1/(4a) 

             所以y=ax^2+(1/(4a)),所以定点的坐标就是(0,1/(2a)),定直线就是x轴。

             把这条抛物线平移,就可以的得到任意一条抛物线y=ax^2+bx+c(a<>0)所对应的定点(-b/(2a),(4ac-b^2+1)/(4a)),定直线的解析式为y=((4ac-b^2-1)/(4a))。

             

         我们回到原来的定义,对于一个定点(p,q)和定直线y=t(在这里,我们为了简化,就只看定直线平行于x轴的情况),我们可以的到抛物线的解析式为y=(1/(2q-2t))x^2+(p/(t-q))x+((p^2+q^2-t^2)/(2q-2t))。

         这样,对于对称轴垂直于y轴的情况也可以将x、y互换得到,当然也可以将坐标轴中y轴与抛物线的对称轴平行建立,然后进行一些旋转就可以了,虽然y不再是x的函数,但是x、y之间的关系也可以表示出来。

          对于一条抛物线,经过焦点(也就是之前所说的定点)的光线(数学中的直线)经抛物线反射后一定是与对称轴平行的。

       (2)、应用:最后,我们来看一个神奇的物理学上抛物线的应用。

                  我们都知道,自行车灯用互相垂直的两个平面镜,就能将入射光平行射出。对于一些车灯,它们的灯罩显然不是两个互相垂直的平面镜这么简单,有的是一个抛物线绕着对称轴旋转而成的空间图形,我们这里利用以上的性质就可以发现,这样的灯光散射的少,也就能使光更加的明亮集中。

                  证明如下:在抛物线y=ax^2+(1/(4a))(a<>0)中,取点P(t,at^2+(1/(4a))),我们从这点向x轴做垂直,垂足为C,抛物线焦点M(0,1/(2a)),P点处抛物线的切线与y轴的交点为D,则这条切线的解析式y=2atx+1/(4a)-at^2(这条直线解析式的k值就是抛物线在P点处的斜率),那么D点坐标就是(0,1/(4a)-at^2),MD=MP=PC,且MD∥PC,所以四边形MDCP就是一个菱形,从而过M点的反射时法线的平行线(也就是过M点的切线的垂线)平分角DMP,从而反射光线和入射光线之间的夹角的大小就等于角DMP,从而证明了反射光线与y轴平行。

     三、pick定理

    (1)内容:对于一个顶点都在格点上的多边形,I表示多边形内的格点个数,B表示多边形边上的格点个数,那么这个多边形的面积s=I+B/2-1。

    (2)证明:(我们的证明分为两部分)

                     ①我们首先证明在该定理成立的条件下,合并两个简单多边形是否成立。设两个多边形为a、b,边界上有格点c。

                         Sa=Ia+Ba/2-1,Sb=Ib+Bb/2-1。

                         Sab=Sa+Sb=Ia+Ib+(Ba+Bb)/2-2;(上两式相加即可)

                         Sab=(Ia+Ib+(c-2))+(Ba+Bb-2*(c-2)-2)/2-1=Ia+Ib+(Ba+Bb)/2-2;(套用该定理)

                       对多边形进行分割的证明也是成立的。

                    ②严格来说,这里才是该定理的证明部分:我们先证明边平行于轴的矩形、再证明对角线分开的三角形、再推广到普通的三角形。

                              对于边平行于轴的矩形:设边上的格点为m、n个。S=(m-1)(n-1)=mn-n-m+1=(m-2)(n-2)+(2(m+n)-4)/2-1,最后一个式子正好就是pick定理的内 容,因此该部分证毕;

                              对于对角线分开的三角形:设对角线上有格点c个。S=(m-1)(n-1)/2=mn/2-n/2-m/2+1/2=((m-2)(n-2)-(c-2))/2+(m+n+c-3)/2-1,同上,该部分证毕。

                              对于普通的三角形,我们可以用前两种情况分割得到,根据①中的证明,我们可以进行这样的分割和合并。

                        有了普通三角形的成立,我们就可以推广到普通多边形了(每一个多边形都可以划分为多个三角形)。

    (3)应用:①在平面直角坐标系中,我们作直线x+y=q(q是质数),这条直线穿过第一象限的q-1个格点,连接这q-1个格点和原点,得到q-2个三角形,这些三角形内的格点是一样的。这么神奇的事实怎么证明呢?这些三角形的面积S相等,同时因为x+y=q,所以x,y互质(如果不互质就有公约数d(d>1)),q就不是素数了),所以边上都只有三个顶点,根据pick定理,就有内部的点数相等了。

                    ②对于一个n*m的矩形,最多能覆盖多少个格点(包括边上的)。B<=2(m+n),I+B=I+B/2-1+B/2+1<=n*m+2(m+n)/2+1=(m+1)(n+1),所以最多就是矩形边和轴平行时,覆盖(m+1)(n+1)。

                       仅考虑边上的点的话,很明显有0<=B<=2(m+n)。

                       如果不包括边上的,0=>-B>=-2(m+n),I=I+B/2-1-B/2+1>=n*m-(m+n)+1=(m-1)*(n-1),且<=mn+1。所以当多边形与轴平行的时候,内部的点最少,(m-1)(n-1);当边界上没有点的时候(平行的左右上下抖动一下),内部的点最多,为mn+1个。

                    ③下面介绍一个非常神奇的定理证明:Farey数列中,前一项分母*后一项分子-后一项分母*前一项分子=1。

                       首先,我们了解一下什么叫Farey数列。我们将0~1中分母不大于k的最简分数从小到大列在一起,记做F_k。

                       如F_5:0/1,1/5,1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 1/1

                       下面我们考虑用pick定理证明这个定理。

                       

                        我们把这些分数放到平面直角坐标系中,如m/n记做(n,m)。我们考虑相邻两个分数对应的点,这两个点与原点的连线上一定没有别的点(因为最简分数的要求),那么这个阴影部分三角形的面积S=0+3/2-1=1/2,设这两个点分别是(n,m)(q,p)(沿斜率增大方向),根据叉积=np-mq=2S可以知道,np-mq=1,正好就是我们的定理。

    (以上应用内容引用自http://www.matrix67.com/blog/archives/2199)

    (4)既然说到了格点上的问题,我们来点有趣的小实验。

           在一张白纸上给出面积小于1的一块图形(可能不规则,十分不规则),能否做出一些格点,使这个图形不经过格点。

           不防做一些图形感受一下。其实做法很简单:我们随便做一些格,把他们沿格线撕开,叠到一起,把纸当做透明的,从上面看下去,一定会有一点没有图形(因为总面积小于1),所以我们可以用个针从这一点扎下去,然后将图形复原,以这些针孔为格点做一些格,就会发现这个图形并没有经过格点。

     (5)和oi有点联系:(a,b)(m,n)两点连线段上整点数有gcd(m-a,n-b)+1(m>=a,n>=b)。证明方法如下:如果(m-a,n-b)=1,那么就是0个;如果(m-a,n-b)!=1就把它缩小gcd(m-a,n-b)到互质,这时候线段上只有两个点,然后相应的放大gcd(m-a,n-b),就有如上的个数了。

         练习:poj2954&&poj1265

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #define maxnode 3
    using namespace std;
    struct use{
        int xi,yi;
    }p[5]={0};
    int cross(int i)
    {
        return ((p[i].xi-p[1].xi)*(p[i+1].yi-p[1].yi)-(p[i].yi-p[1].yi)*(p[i+1].xi-p[1].xi));
    }
    double area()
    {
        int i,j,aa;
        aa=abs((double)cross(2));
        return (double)aa*1.0/2;
    }
    int gcd(int a,int b)
    {
        if (!b) return a;
        else return gcd(b,a%b);
    }
    int main()
    {
        int i,j;
        double s,b;
        while(scanf("%d%d%d%d%d%d",&p[1].xi,&p[1].yi,&p[2].xi,&p[2].yi,&p[3].xi,&p[3].yi)==6)
        {
            j=0;
            for (i=1;i<=3;++i)
            {
                if (p[i].xi==0) ++j;
                if (p[i].yi==0) ++j;
            }
            if (j==6) break;
            s=area();
            b=gcd((int)abs((double)p[1].xi-p[2].xi),(int)abs((double)p[1].yi-p[2].yi))+
              gcd((int)abs((double)p[2].xi-p[3].xi),(int)abs((double)p[2].yi-p[3].yi))+
              gcd((int)abs((double)p[1].xi-p[3].xi),(int)abs((double)p[1].yi-p[3].yi));
            i=(int)(s+1-b*1.0/2);
            printf("%d
    ",i);
        }
    }
    poj2954
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #define maxnode 500
    using namespace std;
    struct use{
        int xi,yi;
    }p[maxnode]={0};
    int corss(int i)
    {
        return ((p[i].xi-p[1].xi)*(p[i+1].yi-p[1].yi)-(p[i].yi-p[1].yi)*(p[i+1].xi-p[1].xi));
    }
    double area(int n)
    {
        int i,a=0;
        for (i=2;i<n;++i)
            a+=corss(i);
        return a*1.0/2.0;
    }
    int gcd(int a,int b)
    {
        if (!b) return a;
        else return gcd(b,a%b);
    }
    int main()
    {
        int t,n,i,j,I,B;
        double S;
        scanf("%d",&t);
        for (j=1;j<=t;++j)
        {
            S=0.0;B=I=0;
            scanf("%d",&n);
            for (i=1;i<=n;++i)
            {
                scanf("%d%d",&p[i].xi,&p[i].yi);
                B+=gcd((int)abs((double)p[i].xi),(int)abs((double)p[i].yi));
                if (i>1)
                {
                    p[i].xi+=p[i-1].xi;p[i].yi+=p[i-1].yi;
                }
            }
            S=area(n);if (S<0) S=-S;
            I=(int)(S-B*1.0/2+1);
            printf("Scenario #%d:
    %d %d %0.1f
    
    ",j,I,B,S);
        }
    }
    poj1265
  • 相关阅读:
    好书推介《实战机器学*》
    Web技术图书名单
    大数据技术书,看看有没有感兴趣的
    博客园设置自定义皮肤,添加自定义小模块悬浮天气组件,github图标链接等
    Final Cut Pro 视频剪辑学习记录,快捷操作等
    css 利用 clip-path 裁剪多边形,三角形,梯形,六边形等
    有呀,有呀,设计!有呀,有呀,组件!
    github README添加badge标识,多彩的tag标签
    vue timeline 开箱即用的时间轴组件,日志更新时间轴组件
    那些需要收藏的网站网址
  • 原文地址:https://www.cnblogs.com/Rivendell/p/4190352.html
Copyright © 2011-2022 走看看