Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 给定角度和半径的正多边形轮廓上点的公式_Math - Fatal编程技术网

Math 给定角度和半径的正多边形轮廓上点的公式

Math 给定角度和半径的正多边形轮廓上点的公式,math,Math,我正在寻找一个公式来计算给定角度和半径的正多边形(例如八角形)轮廓上的点。我可以使用三角法计算多边形的顶点,并使用线/线交点获得轮廓上的点,但这感觉有点笨拙。有没有一个简单的公式可以给出相同的结果?首先,我假设多边形的方向是第一个平面在其右侧垂直。角度是相对于x轴测量的,我们希望找到光线和多边形的交点,如下所示: 我们得到多边形的边数和边数。如果你有外接圆,维基百科页面包含一个公式来推导它们的外接圆。如果多边形已旋转,只需从查询角度添加或减去旋转角度即可 第一步是找到光线相交的边。由于多边形是

我正在寻找一个公式来计算给定角度和半径的正多边形(例如八角形)轮廓上的点。我可以使用三角法计算多边形的顶点,并使用线/线交点获得轮廓上的点,但这感觉有点笨拙。有没有一个简单的公式可以给出相同的结果?

首先,我假设多边形的方向是第一个平面在其右侧垂直。角度是相对于x轴测量的,我们希望找到光线和多边形的交点,如下所示:

我们得到多边形的边数和边数。如果你有外接圆,维基百科页面包含一个公式来推导它们的外接圆。如果多边形已旋转,只需从查询角度添加或减去旋转角度即可

第一步是找到光线相交的边。由于多边形是规则的,因此只需通过分割和舍入即可。我把相应的边角叫做边角。上面五边形的右侧有侧角0,下一个有72°,以此类推

sectorAngle = 2 * PI / sides
sideAngle = sectorAngle * round(angle / sectorAngle)
给定此边角,我们可以计算查询光线的剩余角和边的垂直平分线:

请注意,此角度是有符号的

现在我们只需要在旋转坐标系中重建点,其中平分线是一个轴,垂直方向是另一个轴。我们需要沿着平分线走一段距离等于它们的顶点。我们需要垂直行走的距离是:

sideward = apothem * tan(diffAngle)
我们可以用这个来说明我们的观点:

sideNormalX = cos(sideAngle)
sideNormalY = sin(sideAngle)

pointX = centerX + sideNormalX * apothem - sideNormalY * sideward
pointY = centerY + sideNormalY * apothem + sideNormalX * sideward
下面是一个JavaScript实现:

window.onload=function(){
canvas=document.getElementById('cnv');
ctx=canvas.getContext('2d');
var-pts=100;
对于(变量i=0;i

穿过两点的直线的极坐标
(x_1,y_1)
(x_2,y_2)

radius = (x_2*y_1 - x_1*y_2)/( (x_2-x_1)*cos(angle) - (y_2-y_1)*sin(angle) )
其中,
角度
atan(y\u 1/x\u 1)
扫描到
atan(y\u 2/x\u 2)

所以你所要做的就是把一个圆分成
n
段,然后找到每个顶点的
(x,y)
坐标。然后用上面的公式拟合两个连续顶点之间的直线

下面是使用此技术的示例


听起来像是这个网站的一个问题:您的要求不明确。你给出了什么“角度”?您是否还指定了多边形的边数及其方向?您需要正多边形的极坐标。这是正确的吗?
radius = (x_2*y_1 - x_1*y_2)/( (x_2-x_1)*cos(angle) - (y_2-y_1)*sin(angle) )