0

これは説明するのが非常に複雑なので、最善を尽くします。見逃したものがある場合は申し訳ありません。お知らせください。修正します。

私の質問は、私はこの形を描くことを任されており、

三日月
(出典:learnersdictionary.com

これは、C++ を使用して、この形状の点を計算するコードを記述して実行します。

重要な詳細。

ユーザー入力 - 中心点 (X、Y)、表示する点の数、フォント サイズ (影響半径)

出力 - 形状の座標のリスト。

ポイントを取得した後の全体的な目的は、それらを Excel のグラフに入れることです。うまくいけば、ユーザーが入力したサイズで描画してくれます。

半径の最大値は 165mm、最小値は 35mm であることがわかっています。基本の [フォント サイズ][1] を 20 にすることにしました。

半径 = (選択したフォント サイズ/20)*130。これは単なる推定です。おそらく正しくないことは承知していますが、少なくともテンプレートとしては機能すると思いました。

次に、2 つの異なる中心点を持つ 2 つの異なる円を作成し、それらをリンクして形状を作成することにしました。内側の線は、半径を大きくし、中心点を X 軸 (Y は一定のまま) に沿って大きくする必要があると考えました。

*(これは写真のように見えるものではないことはわかっています。同じ形になるので、私の考えの連鎖です)

そこで、2 番目の中心点を (X+4, Y) と定義しました。(繰り返しになりますが、推定値であり、それらがどれだけ離れているかは実際には問題ではないと考えていました).

次に、半径 2 = (選択したフォント サイズ/20)*165 (最大半径) を決定しました。

したがって、2 つの半径と 2 つの中心点があります。

これはこれまでの私のコードです(動作し、すべてが上記で宣言/入力されています)

for(int i=0; i<=n; i++) //output displayed to user
{                                          
Xnew = -i*(Y+R1)/n; //calculate x coordinate
Ynew = pow((((Y+R1)*(Y+R1)) - (Xnew*Xnew)), 0.5); //calculate y coordinate

 for(int j=0; j<=n; j++)//calculation for angles and output displayed to user
{
Xnew2 = -j*(Y+R2)/((n)+((0.00001)*(n==0))); //calculate x coordinate
Ynew2 = Y*(pow(abs(1-(pow((Xnew2/X),2))),0.5));
if(abs(Ynew2) <= R1)
    cout<<"\n("<<Xnew2<<", "<<Ynew2<<")"<<endl;

三日月を描くときに、2 つの円の始点を同じにすることができないという問題がありますか?

結果をエクセルに出すことができました。その点ですべてが機能します。しかし、Excel のグラフに点をプロットすると、開始点が同じではありません。本質的には、一方が他方よりも小さい 2 つの半円です (Y 軸で停止し、半分のドーナツ形状になります)。

これが理にかなっている場合、円の 2 つの部分を取得して、同じ始点と終点を持つように図形を描画しようとしています。

これを行う方法について誰か提案があれば、それは素晴らしいことです。現在、円が接続されていないため、「半分のドーナツ」の形になっています。

そう。これを正確に修正する方法について、私と共有できるヒント/ヒント/リンクを誰かが持っていますか?

繰り返しますが、質問に問題がある場合は、申し訳ありませんが、お知らせいただければ修正するために最善を尽くします。

乾杯

4

1 に答える 1

0

円上の点のフォーミュラー:

(x-h)^2+(y-k)^2=r^2

The center of the circle is at (h/k)

y を解く

 2y1 = k +/- sqrt( -x^2 + 2hx +r^2 - h^2)

したがって、内側の円の中心が @h/kである場合、半月は @ h から始まり、h - r2

ここで、内側の円と外側の円の終点フォーミュラを解いてプロットする必要があります。x ごとに 4 ポイントを受け取る必要があります (方程式を 2 回解き、それぞれ 2 つの解を使用します)。

私はそれを実装しませんでしたが、これは私の思考の流れです...

于 2013-03-28T12:23:01.467 に答える