精华内容
下载资源
问答
  • 求正2n边形的最小外接正方形

    千次阅读 2020-05-19 10:45:39
    第一道是求边长为1的正2n边形的最小外接正方形的边长,输入的n都为偶数 这个不难,因为输入的n为偶数,所以这个正2n边形边的个数是能整除4的,而正方形恰好四条边,所以最小的外接正方形只要像这样正着放让四个边都...

    前几天在某次比赛中遇到了这么两道题
    第一道是求边长为1的正2n边形的最小外接正方形的边长,输入的n都为偶数

    这个不难,因为输入的n为偶数,所以这个正2n边形边的个数是能整除4的,而正方形恰好四条边,所以最小的外接正方形只要像这样正着放让四个边都贴着正方形就可以了
    在这里插入图片描述
    这里就以这个正12边形为例,正12边形的图片是百度百科的然后自己画了个正方形加了几条辅助线。
    这个就很好求了,正方形的边长是2h,我们知道正2n边形的边长为1,一半就是0.5,所以tan(a)=0.5/h,那么只要求出角a就可以了,我们可以把正2n边形切成2n个小等腰三角形,三角形的顶角就是2a,一圈是2π,一共2n个三角形,所以2a=2π/2n,化简之后得出a=π/n/2,所以正方形边长就等于2h=2×(0.5/tan(a))=1/tan(π/n/2),这个问题就解决了

    代码如下:
    #include <iostream>
    #include <cstdio>
    #include <cmath>
    using namespace std;
    int main()
    {
    	int T;
    	cin >> T;
    	int n;
    	double PI = 3.141592653589793238;
    	while (T--)
    	{
    		scanf("%d", &n);
    		printf("%.9lf\n", 1 / tan(PI / 2 / n));
    	}
    	return 0;
    }
    

    然后另一道题和上一题其他条件都一样,唯一不同的就是输入的n都为奇数
    我好奇的用上一道题的代码试了一下,虽然知道肯定不行,但就是想试
    然后想知道n为奇数的时候正2n边形在最小的外接正方形里是怎么摆放的
    因为六边形比较常见,研究的人应该挺多,所以就去百度了一下正六边形的最小外接正方形
    废了好大力气找到了正确的图

    在这里插入图片描述
    我按照这个样子尝试着画了一下正10的,但是手画的实在是太丑了,然后就一时半会没研究出来什么规律,然后就去补学校的作业去了。
    次日,研究了一会,无果
    于是鼓起勇气去问了大佬
    为了让大佬看的方便,我忽然想到我可以百度搜图然后用电脑画一下

    在这里插入图片描述在这里插入图片描述
    大概就是这样,正2n边形的一条对角线和正方形对角线重合
    在一番讨论之后,得出了正解(大佬是真的强)

    在这里插入图片描述
    如图所示:
    可知正方形对角线的一半d的长度等于x的长度加y的长度
    x=l×sin(a)(l也就是线段OC)
    y=l×cos(a)
    l很好求,由上一道题的图可知,l=0.5/sin(π/n/2)

    那么角a怎么求呢

    如图可知,将正2n边形分成2n个小三角形后,三角形ABC所覆盖的小三角形的个数为n个,然后这n个小三角形又被线段OB分成数量差一的两部分(随着n的增大三角形越来越接近等腰直角三角形),然后因为n是奇数所以这两部分自然就是一个奇数一个偶数并且他们的差为1(例如n=7时分成3和4,n=9时分成4和5,大概就是这个意思)

    偶数的那部分的一半所占的小三角形的顶角的和就是图中的角a
    所以只要判断一下n/2是奇数还是偶数,如果是偶数那角a所占的小三角形份数就是n/4n/2如果是奇数那另一个偶数一定就是n/2+1,所以a占的份数就是(n/2+1)/2

    然后求出正方形对角线一半之后,把它乘根号2就是正方形的边长

    代码如下:
    #include <iostream>
    #include <cstdio>
    #include <cmath>
    using namespace std;
    int main()
    {
    	int T;
    	cin >> T;
    	int n;
    	double PI = 3.141592653589793238;
    	double x, y, a, l;
    	while (T--)
    	{
    		scanf("%d", &n);
    		// 这里用了一个三目判断n/2是奇还是偶,然后求出a所占的份数,进而求出a的度数
    		a = PI / n * ((n / 2) % 2 == 0 ? n / 4 : (n / 2 + 1) / 2);
    		// 然后求出l,x,y
    		l = 0.5 / sin(PI / n / 2);
    		x = l * sin(a);
    		y = l * cos(a);
    		// 然后x+y是对角线的一半,再乘根号2就是正方形边长了
    		printf("%.9lf\n", (x + y) * sqrt(2));
    	}
    	return 0;
    }
    

    ヾ(≧∪≦*)ノ〃

    展开全文
  • 满意答案首先进行数学分析:①R=5的圆...③外接正方形,其边长=2R=10,面积=100。④求各类周长方法同上,略。简略编程序实现计算:……#define Pi 3.14int R;float BIen,S,L;R=5;S=1.0*R*R*Pi;L=2.0*Pi*R;printf(“\...

    满意答案

    首先进行数学分析:

    ①R=5的圆,面积是S圆=πR²=25π。

    ②内接正方形,其对角线=2R=10,

    其边长=√(10²/2)=√50,面积=50。

    ③外接正方形,其边长=2R=10,面积=100。

    ④求各类周长方法同上,略。

    简略编程序实现计算:

    ……

    #define Pi 3.14

    int R;

    float BIen,S,L;

    R=5;

    S=1.0*R*R*Pi;

    L=2.0*Pi*R;

    printf(“\ n半径R=%d的圆,面积=%5.2f,周长=%5.2f。”,R,S,L);

    BIen=sqrt(R*R/2.0);

    S=Blen*Blen;

    L=4.0*Blen;

    printf(“\ n半径R=%d的圆内接正方形边长=%5.2f,面积=%5.2f,周长=%5.2f。”,R,Blen,S,L);

    BIen=2.0*R;

    S=Blen*Blen;

    L=4.0*Blen;

    printf(“\ n半径R=%d的圆外接正方形边长=%5.2f,面积=%5.2f,周长=%5.2f。”,R,Blen,S,L);

    ……

    😎😎😎😎😎😎😎😎😎

    编写程序时,要自己写代码,

    不要拷贝这里的!

    因为有些字符、标点是全角字符,

    编译程序不认,会报错的!

    00分享举报

    展开全文
  • 直接上代码: ... /// 传入一系列的GeoJSON格式的点集,转换得到外包正方形 /// /// /// GeoJSON格式的点集 /// 可选参数,缓冲距离 /// public static ESRI.ArcGIS.Geometry.IPolygon CreateEsriPol

    直接上代码:

            /// <summary>传入一系列的GeoJSON格式的点集,转换得到外包正方形
            /// 
            /// </summary>
            /// <param name="listPoint">GeoJSON格式的点集</param>
            /// <param name="b">可选参数,缓冲距离</param>
            /// <returns></returns>
            public static ESRI.ArcGIS.Geometry.IPolygon CreateEsriPolygon(List<GeoJSON.Net.Geometry.Point> listPoint, double? b = 0.0)
            {
                if (0 >= listPoint.Count)
                    return null;
    
                var firstPoint = listPoint[0].Coordinates;
                double dMinX = firstPoint.X; double dMinY = firstPoint.Y; double dMaxX = firstPoint.X; double dMaxY = firstPoint.Y; double dSumX = 0.00; double dSumY = 0.00;
                foreach (var aPt in listPoint)
                {
                    dMinX = aPt.Coordinates.X <= dMinX ? aPt.Coordinates.X : dMinX;
                    dMinY = aPt.Coordinates.Y <= dMinY ? aPt.Coordinates.Y : dMinY;
                    dMaxX = aPt.Coordinates.X >= dMaxX ? aPt.Coordinates.X : dMaxX;
                    dMaxY = aPt.Coordinates.Y >= dMaxY ? aPt.Coordinates.Y : dMaxY;
                    dSumX += aPt.Coordinates.X;
                    dSumY += aPt.Coordinates.Y;
                }
                double dCenX = dSumX * 100 / listPoint.Count * 0.01;  //正方形中心点X坐标
                double dCenY = dSumY * 100 / listPoint.Count * 0.01;  //正方形中心点Y坐标
                double dHalfLength = (((dMaxX - dMinX) > (dMaxY - dMinY)) ? (dMaxX - dMinX) : (dMaxY - dMinY)) * 0.5;
                dHalfLength += (b.HasValue && (double)b > 0) ? (double)b : 0;  //正方形边长的一半
    
                ESRI.ArcGIS.Geometry.IPointCollection pPointCol = new ESRI.ArcGIS.Geometry.Polygon();
                pPointCol.AddPoint(CreatePoint(dCenX - dHalfLength, dCenY + dHalfLength));  //左上角点
                pPointCol.AddPoint(CreatePoint(dCenX + dHalfLength, dCenY + dHalfLength));  //右上角点
                pPointCol.AddPoint(CreatePoint(dCenX + dHalfLength, dCenY - dHalfLength));  //右下角点
                pPointCol.AddPoint(CreatePoint(dCenX - dHalfLength, dCenY - dHalfLength));   //左下角点
                pPointCol.AddPoint(CreatePoint(dCenX - dHalfLength, dCenY + dHalfLength));  //左上角点(用于闭合线段)
    
                return pPointCol as ESRI.ArcGIS.Geometry.IPolygon;
            }


    展开全文
  • /** * @param raidus 单位米 * return minLat,minLng,maxLat,maxLng */ this.getCircleBround=function(lon,lat,raidus){ var PI = 3.14159265; var EARTH_RADIUS = 6378137; var RAD
        /**
         * @param raidus 单位米
         * return minLat,minLng,maxLat,maxLng
         */
        this.getCircleBround=function(lon,lat,raidus){		
    		var PI = 3.14159265;
    	    var EARTH_RADIUS = 6378137;
    	    var RAD = Math.PI / 180.0;
    		var latitude = lat;
    		var longitude = lon;		
    		var degree = (24901*1609)/360.0;
    		var raidusMile = raidus;		
    		var dpmLat = 1/degree;
    		var radiusLat = dpmLat*raidusMile;
    		//alert('latitude:'+latitude);
    		//alert('radiusLat:'+radiusLat);
    		var minLat = eval(latitude) - eval(radiusLat);
    		var maxLat = eval(latitude) + eval(radiusLat);
    		
    		var mpdLng = degree*Math.cos(latitude * (PI/180));
    		var dpmLng = 1 / mpdLng;
    		var radiusLng = dpmLng*raidusMile;
    		//alert('radiusLng:'+radiusLng);
    		//alert('longitude:'+longitude);
    		var minLng = eval(longitude) - eval(radiusLng);
    		var maxLng = eval(longitude) + eval(radiusLng);
    		//alert('maxLng:'+maxLng);
    		//alert("["+minLng+","+minLat+","+maxLng+","+maxLat+"]");
    		return minLng+','+minLat+','+maxLng+','+maxLat;
    	}
    

    展开全文
  • javascript: /** * @param raidus 单位米 * return minLat,minLng,maxLat,maxLng */ this.getCircleBround=function(lon,lat,raidus){ var PI = 3.14159265; var EARTH_RADIUS = 6378
  • 正方形外接

    2021-03-17 21:14:53
    题目描述 代码实现 import turtle turtle.pensize(2)#画笔的大小 for i in range(4): ...turtle.left(-45)#turtle.left(45)为小龟头向左旋转45度,turtle.left(-45)为小鬼头向右旋转45度 turtle.circle(100*pow(2...
  • 刚看了《最强大脑》中英...今天先来画画外接圆和内切圆,留个大坑后面来填。外接圆圆心:三角形垂直平分线的交点。内切圆圆心:三角形角平分线的交点。有了思路,就可以用万能的python来计算了import matplotlib.pyp...
  • 使用turtle库函数绘制一个如图所示的,边长为100像素的正方形及一个紧挨四个顶点的圆形(外接圆)
  • 如果你只想画一个任意角度的纯色正方形,可以用三角法计算旋转正方形的顶点,然后用polygon绘制。在import mathfrom PIL import Image, ImageDraw#finds the straight-line distance between two pointsdef distance...
  • turtle正方形绘制

    千次阅读 2018-04-16 21:22:00
    描述使用turtle库,绘制一个正方形。注意:这不是自动评阅题目,仅用于练习,没有评阅。 输出示例正方形效果如下: import turtle turtle.setup(650, 350, 200, 200) turtle.penup() turtle.fd(-250) turtle....
  • 题目描述传送门题解这题有毒啊… 首先容斥一下 答案=整个网格内的正方形数-...但是可以发现每一个正方形都是由其外接正方形决定的,也就是可以枚举外接正方形的边长,一个边长为a的外接正方形可以确定出来a个正方形
  • 如何使用matlab绘制简单的正方形连续目标(离散点)%利用linspace绘制对应长宽%x_dim_parameter参数为取值范围%points_num为取值点数%为绘制成连续目标需利用meshgrid函数将正方形填满%此时形成的是二维矩阵,需要利用...
  • 如图,ABCDABCD是正方形;AB′C′D′AB'C'D'也是正方形,边长小于前者;顶点AA重合,其它点按照同样时针顺序编号;...证明关键词:相似直角三角形(或全等三角形),正方形外接圆;三角形外接圆;45°圆周角。
  • 该代码可用于求取一个多边形的最小外接矩形
  • Matlab 最小外接矩形

    万次阅读 热门讨论 2016-05-12 15:07:27
    Matlab 中并没有发现最小外接矩形的代码,为了方便 下面提供最小外接矩形的代码: function [rectx,recty,area,perimeter] = minboundrect(x,y,metric) % minboundrect: Compute the minimal bounding rectangle of ...
  • matlab 求最小外接矩形

    2014-06-13 13:28:42
    求多个目标的最小外接矩形,有说明,matlab版
  • 主要为大家详细介绍了OpenCV实现最小外接正矩形,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 最小外接矩形

    千次阅读 2018-07-26 16:22:19
    对于多边形 P 的一个外接矩形存在一条边与原多边形的边共线。 不仅不必去检测所有可能的方向, 而且只需要检测与多边形边数相等数量的矩形。      图示上述结论: 四条切线(红色), 其中一条与多边形一...
  • matlab实现画最小外接矩形

    热门讨论 2011-07-12 21:31:18
    matlab实现的,画最小外接矩形。其中包括求出最小外接矩形的四个顶点坐标,周长,面积等参数。
  • 图形模式识别 matlab 圆 正方形 矩形

    热门讨论 2011-10-19 14:09:48
    图形模式识别 圆 、正方形 、矩形的算法都在这里
  • 今天小编就为大家分享一篇Python 用turtle实现用正方形画圆的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • turtle绘制正方形

    2020-04-02 14:15:20
  • CF的连个题目,C1是求边数为4k的正多变形的外接正方形的边长,C2是求边数为4K+2的正多边形的外接正方形的边长。 C1可以发现,有4条边与外接正方形重合,那么找出对应的角,再利用三角函数求解。c++提供sin(),cos(),...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,575
精华内容 630
关键字:

外接正方形