【发布时间】:2013-03-26 00:29:30
【问题描述】:
这个解释起来比较复杂,所以我会尽力而为,如果有什么遗漏的地方,请告诉我,我会改正的。
我的问题是,我的任务是绘制这个形状,
这将使用 C++ 编写代码来计算此形状上的点。
重要细节。
用户输入 - 中心点(X、Y)、要显示的点数、字体大小(影响半径)
输出 - 形状上的坐标列表。
一旦我有了这些点,我的总体目标就是将它们放入 Excel 上的图表中,并希望它会以用户输入的尺寸为我绘制出来!
我知道最大半径是 165 毫米,最小是 35 毫米。我决定我的基数Font Size 应该是 20。然后我做了一些思考并想出了这个等式。
半径 =(选择的字体大小/20)*130。这只是一个估计,我意识到它可能不正确,但我认为它至少可以作为一个模板。
然后我决定我应该创建两个不同的圆,两个不同的中心点,然后将它们连接在一起以创建形状。我认为 INSIDE 线必须有一个更大的半径和一个沿 X 轴更远的中心点(Y 保持不变),因为它可以切入外线。
所以我将第二个中心点定义为 (X+4, Y)。 (再次,只是估计,认为它们相距多远并不重要)。
然后我决定 Radius 2 = (Chosen Font Size/20)*165 (max radius)
所以,我有 2 个半径和两个中心点。
现在要计算圆圈上的点,我真的很努力。我决定最好的方法是创建一个增量(这里是模板)
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;
}
现在,就我的一生而言,我无法找出一个方程式来计算分数。我找到了involve angles 的方程式,但因为我没有,所以我很挣扎。
本质上,我在这里尝试计算点“P”,除了一直绕圆。
(来源:tutorvista.com)
我认为的另一点可能是一个问题,即对计算出的值施加限制以仅显示形状上的值。?除了使外线成为一个完整的半圆以便我有最大半径之外,不确定如何选择限制?
所以。有没有人可以与我分享有关如何准确进行的任何提示/提示/链接?
再次感谢,问题有任何问题,如果您让我知道,对不起,我会尽力纠正。
干杯
更新;
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<<")";
}
意见?
【问题讨论】:
-
什么决定了交点的位置?是随意的吗?
-
或者说得更好,有效形状的准确标准是什么?
-
另外,(在没有精确标准的情况下),我不明白为什么内段的半径需要更大?一个较大的圆可以像一个较小的圆一样容易地与外圆相交。
-
@JBentley 我的假设是它们是具有给定中心和半径的两个圆。
-
我想如果我把外线做成一个半圆,然后你就会知道使用上面显示的方程的半径,那么内线可以在起点和终点相交(可以很容易地计算出)的半圆?因为那时我可以限制内线可以达到的 Y 值?有帮助吗?