CalculatingtheCoordinatesoftheVerticesofaRegularPolygon由动态变化的给定公式翻译。有一些非常有趣的数学,但我坚持这一点。如何只计算边数,理想情况下(但不一定)原点在中心,如何计算正多边形(顶点所有角度都相等)的顶点坐标?例如:六边形可能具有以下点(全部为浮点数):(1.5,0.5*Math.Sqrt(3))(0,1*Math.Sqrt(3))(-1.5,0.5*Math.Sqrt(3)))(-1.5,-0.5*Math.Sqrt(3))(0,-1*Math.Sqrt(3))(1.5,-0.5*Math.Sqrt(3))我的方法如下所示:voidInitPolygonVertexCoords(RegularPolygonpoly)并需要向其添加坐标(或类似的东西,如列表):Point[]_polygonVertexPoints;我主要对此处的算法感兴趣,但C#中的示例会很有用。我什至不知道从哪里开始。我该如何实施?有可能吗?!谢谢。for(i=0;i其中r为外接圆的半径。抱歉语言错误NoHablaC#。基本上任意两个顶点之间的角度为2pi/n,并且所有顶点距离原点r.编辑:如果你想要中心而不是原点,说(x,y)for(i=0;i点数等于边数。你需要angle=2*pi/numPoints是angle=2*pi/numPoints.然后从原点垂直上方开始,多边形的大小由半径给出:for(inti=0;i如果你的中心是原点,那么忽略centreX和centreY项,因为它们将为0,0。交换cos和sin将使第一个点水平指向原点的右侧。抱歉,我现在手头没有完整的解决方案,但你应该尝试找到一个2D渲染的圆。圆的所有经典实现(x,y,r)像您描述的多边形一样使用绘图(但有50多条边)。假设从顶点到原点的距离为1。并且假设(1,0)始终是多边形的坐标。给定顶点数(比如n),将(1,0)定位到下一个坐标所需的旋转角度将为(360/n)。这里需要的计算是旋转坐标。就是这样;一个旋转矩阵。例如theta=360/n;[cos(theta)-sin(theta)][sin(theta)cos(theta)]将是您的旋转矩阵。如果你了解线性代数,你就已经知道我的意思了。如果不光看MatrixMultiplicationWell,如果你测试这里列出的所有版本,你会发现实现很糟糕。您可以检查从中心到多边形每个生成点的距离:http://www.movable-type.co.uk/scripts/latlong.html现在我搜索了很多但找不到方法使用中心和半径计算多边形的任何良好实现...所以我回到我的数学书并尝试自己实现它。最后我想到了这个……100%好:Listcoordinates=newList();#region创建多边形坐标if(!string.IsNullOrWhiteSpace(bus.Latitude)&&!string.IsNullOrWhiteSpace(bus.Longitude)&&!string.IsNullOrWhiteSpace(bus.ListingRadius)){doublelat=DegreeToRadian(Double.Parse(bus.Latitude)));双lon=DegreeToRadian(Double.Parse(bus.Longitude));双dist=Double.Parse(bus.ListingRadius);双角=36;for(doublei=0;i如果你测试它,你会发现所有点都在你给的精确距离(半径)内。另外不要忘记声明earthRadius。私有const双地球半径=6371.01;这将计算十边形的坐标。您看到的角度是36度。您可以将??度分成任意数量的边,并将结果放入角度变量中。无论如何..我希望这对你有帮助@rmx!为正多边形生成一组坐标的一种可能实现是:定义多边形中心、半径和第一个顶点1。将顶点旋转n次2角度:360/n。在这个实现中,我使用一个向量来存储生成的坐标和一个递归函数来生成它们:voidgenerateRegularPolygon(vector&v,Point¢er,intsidesNumber,intradius){//转换为弧度doubleangRads=2*PI/double(边数);//第一个顶点Pointinitial(center.x,center.y-radius);rotateCoordinate(v,center,initial,angRads,sidesNumber);}其中:voidrotateCoordinate(vector&v,Point&axisOfRotation,Point&initial,doubleangRads,intnumberOfRotations){//基本情况:变换次数注意:Point是一个简单的类,它将坐标包装到单个数据结构中:classPoint{public:Point():x(0),y(0){}Point(intxx,intyy):x(xx),y(yy){}private:intx;诠释y;};1(相对于)中心,半径。在我的例子中,第一个顶点从中心向上平移一个半径长度。2一个n个正多边形有n个顶点。简单的方法是:让我们取N-gone(边数)和边长L。角度将为T=360/N。假设一个顶点位于原点。*第一个顶点=(0,0)*第二个顶点=(LcosT,LsinT)*第三个顶点=(LcosT+Lcos2T,LsinT+Lsin2T)*第四个顶点=(LcosT+Lcos2T+Lcos3T,LsinT+Lsin2T+Lsin3T)你可以以上就是C#学习教程:计算正多边形顶点坐标。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注---本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
