楕円の円周のみを描きたい。私はこれを使用する:Gdkカイロの描画楕円形
gc->save();
gc->translate(xc, yc);
gc->arc(0.0, 0.0, 1.0, 0.0, 2.0*M_PI);
gc->scale(width*0.5, height*0.5);
gc->stroke();
gc->restore();
しかし、私は常に楕円形を取得します。私は間違って何をしていますか?
楕円の円周のみを描きたい。私はこれを使用する:Gdkカイロの描画楕円形
gc->save();
gc->translate(xc, yc);
gc->arc(0.0, 0.0, 1.0, 0.0, 2.0*M_PI);
gc->scale(width*0.5, height*0.5);
gc->stroke();
gc->restore();
しかし、私は常に楕円形を取得します。私は間違って何をしていますか?
まあ、scale()
への電話は、おそらく意図したことをしていないでしょう。間違った順序でコールを間違って入力した場合、またはカイロの変換がどのように機能するかをあまり理解していないかどうかはわかりません。後者の場合:
変換は次の操作にのみ影響します。そして、それは何らかの形で座標やサイズを含む操作にのみ影響します。この場合、アークに適用したかったでしょう。しかし、実際にはストロークにのみ適用されており、意図していない方法で行われる可能性があります。
変換が座標やサイズに関係する操作にどのように影響するかを知っていますか?まあ、明らかではないかもしれませんが、ストロークは暗黙的にサイズ、すなわちストローク・サイズを含みます。したがって、アークのストロークのサイズは、x軸の場合はwidth * 0.5
、y軸の場合はheight * 0.5
になります。言い換えれば、ストロークはすごくかわいいです。
興味深いことに、弧が実際にscale()
の影響を受けていないにもかかわらず、楕円形の代わりに円形が残っていたということを意味していますが、楕円形になっています。あなたがarc()
を呼び出した後がありますが、stroke()
を呼び出す前に、あなたと羽目ないように倍率をリセットscale()
arc()
だから、あなたの問題を解決するにはモンスターストローク再び