Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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
C++ 圆上的点,有限制。如何计算没有角度,但半径和中心点?_C++_Excel_Geometry - Fatal编程技术网

C++ 圆上的点,有限制。如何计算没有角度,但半径和中心点?

C++ 圆上的点,有限制。如何计算没有角度,但半径和中心点?,c++,excel,geometry,C++,Excel,Geometry,这是相当复杂的解释,所以我会尽我所能,对不起,如果有什么我错过了,让我知道,我会纠正它 我的问题是,我的任务是画这个形状 资料来源: 这是用C++编写的,计算这个形状上的点的代码。< /P> 重要细节 用户输入-中心点X、Y、要显示的点数、字体大小影响半径 输出-形状上的坐标列表 总的目标是,一旦我有点是把他们放在一个图表上的Excel,它将有望为我画它,在用户输入的大小 我知道最大半径是165mm,最小半径是35mm。我已经决定我的基数是20。然后我想了想,得出了这个方程式 半径=所选字体大

这是相当复杂的解释,所以我会尽我所能,对不起,如果有什么我错过了,让我知道,我会纠正它

我的问题是,我的任务是画这个形状

资料来源:

<>这是用C++编写的,计算这个形状上的点的代码。< /P> 重要细节

用户输入-中心点X、Y、要显示的点数、字体大小影响半径

输出-形状上的坐标列表

总的目标是,一旦我有点是把他们放在一个图表上的Excel,它将有望为我画它,在用户输入的大小

我知道最大半径是165mm,最小半径是35mm。我已经决定我的基数是20。然后我想了想,得出了这个方程式

半径=所选字体大小/20*130。这只是一个估计,我意识到它可能不正确,但我认为它至少可以作为一个模板

然后我决定我应该创建两个不同的圆,两个不同的中心点,然后将它们连接在一起创建形状。我认为内线必须有一个更大的半径和一个沿着X轴Y的中心点保持不变,因为这样它才能切入外线

所以我把第二个中心点定义为X+4,Y。再一次,仅仅是估计,认为它们之间的距离并不重要

然后我决定半径2=所选字体大小/20*165最大半径

我有两个半径和两个中心点

现在要计算圆上的点,我真的很费劲。我决定最好的方法是在这里创建一个增量模板

for(int i=0; i<=n; i++) //where 'n' is users chosen number of points
{ 
  //Equation for X point
  //Equation for Y Point
  cout<<"("<<X<<","<<Y<<")"<<endl;
}
现在,就我的一生而言,我无法找出一个方程式来计算这些点。我已经找到了方程,但由于我没有任何方程,我正在努力

本质上,我是在计算点‘p’,除了圆的周围。 资料来源:

我认为另一个问题可能是对计算值施加限制,以仅显示形状上的值。?不知道如何精确地选择极限,而不是使外线成为一个完整的半圆,这样我就有了一个最大半径

所以。是否有任何人有任何提示/提示/链接可以与我分享如何准确进行

再次感谢您,如果您有任何问题,对不起,如果您让我知道,我将尽力纠正

干杯

更新

R1 = (Font/20)*130;
R2 = (Font/20)*165;

for(X1=0; X1<=n; X1++)
{
    Y1 = ((2*Y)+(pow(((4*((pow((X1-X), 2)))+(pow(R1, 2)))), 0.5)))/2;
    Y2 = ((2*Y)-(pow(((4*((pow((X1-X), 2)))+(pow(R1, 2)))), 0.5)))/2;
    cout<<"("<<X1<<","<<Y1<<")";
    cout<<"("<<X1<<","<<Y2<<")";
}

意见?

圆的方程是

(x - h)^2 + (y - k)^2 = r^2
通过一点代数,您可以在从h到h+r的范围内迭代x,并通过适当的增量计算y的两个对应值。这将画一个完整的圆圈

下一步是找到两个圆相交的x坐标,假设月亮形状由两个合适的圆定义。同样,一些代数和一支铅笔和一张纸也会有所帮助

更多详情:

要在不使用极坐标和三角的情况下绘制圆,可以执行以下操作:

for x in h-r to h+r increment by delta
    calculate both y coordinates
for theta = 0 to 2*PI increment by delta
    x = r * cos(theta)
    y = r * sin(theta)
要计算y坐标,需要解y的圆方程。最简单的方法是将其转换为a*y^2+B*y+C=0形式的二次方程,并使用二次方程:

(x - h)^2 + (y - k)^2 = r^2
(x - h)^2 + (y - k)^2 - r^2 = 0
(y^2 - 2*k*y + k^2) + (x - h)^2  - r^2 = 0
y^2 - 2*k*y + (k^2 + (x - h)^2  - r^2) = 0
所以我们有

A = 1
B = -2*k
C = k^2 + (x - h)^2  - r^2
现在将这些插入到二次方程中,并为for循环中的每个x值输出两个y值。最可能的情况是,您希望在一个或多个单独的函数中进行计算

正如你所看到的,这是相当混乱的。用三角学和角度做这件事会更干净

更多想法:

即使问题中所述的用户输入中没有角度,也没有内在的原因说明您不能在计算过程中使用它们,除非您另有特定要求,例如,因为您的老师告诉您不要这样做。这么说来,使用极坐标使这变得更容易。对于完整的循环,您可以执行以下操作:

for x in h-r to h+r increment by delta
    calculate both y coordinates
for theta = 0 to 2*PI increment by delta
    x = r * cos(theta)
    y = r * sin(theta)

要绘制圆弧,而不是整圆,只需更改for循环中θ的限制。例如,圆的左半部分从PI/2变为3*PI/2。

圆的方程式为

(x - h)^2 + (y - k)^2 = r^2
通过一点代数,您可以在从h到h+r的范围内迭代x,并通过适当的增量计算y的两个对应值。这将画一个完整的圆圈

下一步是找到两个圆相交的x坐标,假设月亮形状由两个合适的圆定义。同样,一些代数和一支铅笔和一张纸也会有所帮助

更多详情:

要在不使用极坐标和三角的情况下绘制圆,可以执行以下操作:

for x in h-r to h+r increment by delta
    calculate both y coordinates
for theta = 0 to 2*PI increment by delta
    x = r * cos(theta)
    y = r * sin(theta)
要计算y坐标,需要解y的圆方程。最简单的方法是将其转换为a*y^2形式的二次方程 +B*y+C=0,使用二次方程:

(x - h)^2 + (y - k)^2 = r^2
(x - h)^2 + (y - k)^2 - r^2 = 0
(y^2 - 2*k*y + k^2) + (x - h)^2  - r^2 = 0
y^2 - 2*k*y + (k^2 + (x - h)^2  - r^2) = 0
所以我们有

A = 1
B = -2*k
C = k^2 + (x - h)^2  - r^2
现在将这些插入到二次方程中,并为for循环中的每个x值输出两个y值。最可能的情况是,您希望在一个或多个单独的函数中进行计算

正如你所看到的,这是相当混乱的。用三角学和角度做这件事会更干净

更多想法:

即使问题中所述的用户输入中没有角度,也没有内在的原因说明您不能在计算过程中使用它们,除非您另有特定要求,例如,因为您的老师告诉您不要这样做。这么说来,使用极坐标使这变得更容易。对于完整的循环,您可以执行以下操作:

for x in h-r to h+r increment by delta
    calculate both y coordinates
for theta = 0 to 2*PI increment by delta
    x = r * cos(theta)
    y = r * sin(theta)

要绘制圆弧,而不是整圆,只需更改for循环中θ的限制。例如,圆的左半部分从PI/2变为3*PI/2。

根据代码大师对这个问题的评论,内圈看起来更像半个圆,而不是外圈。使用代码大师答案中的方程式计算内圈的点。然后,看看如何计算一个与你的圆相交的圆的半径,给定你可以任意设置的距离和你知道的相交点,因为它是一个半圆。从这里你可以画出任意给定距离的外弧,你所需要做的就是改变距离,直到你产生一个你满意的形状


可能会帮助你应用代码大师的方程式。

根据代码大师对这个问题的评论,内圈看起来更像半圈,而不是外圈。使用代码大师答案中的方程式计算内圈的点。然后,看看如何计算一个与你的圆相交的圆的半径,给定你可以任意设置的距离和你知道的相交点,因为它是一个半圆。从这里你可以画出任意给定距离的外弧,你所需要做的就是改变距离,直到你产生一个你满意的形状



可以帮助您应用代码大师的方程式。

什么决定了交点的位置?它是任意的吗?或者更好地说,有效形状的精确标准是什么?同样,在没有精确标准的情况下,我不明白为什么内段的半径需要更大?一个较大的圆可以像一个较小的圆一样容易地与外部圆相交。@JBentley我的假设是它们是两个具有给定中心和半径的圆。我想如果我把外线画成一个半圆,你就可以知道使用上面所示方程式的半径,然后内线可以在起点和终点相交,这可以很容易地计算出半圆?因为这样我就可以限制内线的Y值了?这有帮助吗?什么决定了交点的位置?它是任意的吗?或者更好地说,有效形状的精确标准是什么?同样,在没有精确标准的情况下,我不明白为什么内段的半径需要更大?一个较大的圆可以像一个较小的圆一样容易地与外部圆相交。@JBentley我的假设是它们是两个具有给定中心和半径的圆。我想如果我把外线画成一个半圆,你就可以知道使用上面所示方程式的半径,然后内线可以在起点和终点相交,这可以很容易地计算出半圆?因为这样我就可以限制内线的Y值了?那有帮助吗?谢谢,我会尝试一下。我正在努力创造一个增量,它将贯穿整个循环中的所有值。还有其他提示吗?@Craig你所说的圆中的所有值是什么意思?@Craig代码大师所说的是一个圆有无限多的点。你需要决定要显示的合理点数,然后只计算这些点数。@Craig我用一个问题编辑了我的答案,这个问题可能会帮助你解决代码大师的方程式。谢谢,我会尝试一下。我正在努力创建一个增量,它将通过圆圈中的所有值。还有其他提示吗?@Craig你所说的圆中的所有值是什么意思?@Craig代码大师所说的是一个圆有无限多的点。您需要确定要显示的合理点数,然后只计算这些点数。@Craig我用一个问题编辑了我的答案,这个问题可能有助于您处理代码大师的方程式。@Craig在编写迭代x时,我脑子里有一个for循环。您需要决定增加x的量。你可以简单地增加1++x或其他值x+=delta,这取决于你使用的单位以及你需要的近似值与实际圆的距离。@Craig在我有机会评论你如何解方程之前,你先前的评论就消失了。
我想你发现结果有问题。首先,我在结果中没有看到任何y值。让我们了解您对我们的看法,特别是如果您需要更多帮助。啊!我现在明白了,我真的不明白为Y计算两个值,每个x值…对不起,迟到了,我的注意力没有集中到正确的地方。很抱歉。但是是的,谢谢,我会试试看会发生什么。同意二次型可能很混乱,但至少我知道我会得到两个希望正确的值。再次感谢您,我会随时向您通报。@Craig我已经编辑了我的答案,并对如何使用trig解决您的问题进行了一些思考。如果你了解基本知识,这比使用二次公式要干净得多。使用你最新的代码,有没有办法选择点数?代码可以工作,但仅显示4points@Craig当我写iterate x…,我脑子里有一个for循环。您需要决定增加x的量。你可以简单地增加1++x或其他值x+=delta,这取决于你使用的单位以及你需要的近似值与实际圆的距离。@Craig在我有机会评论你如何解方程之前,你先前的评论就消失了。我想你发现结果有问题。首先,我在结果中没有看到任何y值。让我们了解您对我们的看法,特别是如果您需要更多帮助。啊!我现在明白了,我真的不明白为Y计算两个值,每个x值…对不起,迟到了,我的注意力没有集中到正确的地方。很抱歉。但是是的,谢谢,我会试试看会发生什么。同意二次型可能很混乱,但至少我知道我会得到两个希望正确的值。再次感谢您,我会随时向您通报。@Craig我已经编辑了我的答案,并对如何使用trig解决您的问题进行了一些思考。如果你了解基本知识,这比使用二次公式要干净得多。使用你最新的代码,有没有办法选择点数?代码有效,但仅显示4个点