円周上に図形を描くには?


mori  2008-01-04 20:42:47  No: 29162

procedure TForm.FormPaint(Sender: TObject);
begin
  Canvas.Ellipse(10,10,Width-20,Height-40);
end.

上のプログラムで楕円を描いた後に、その円周上の座標の一つを中心に
小さな円を描きたいと思っています。
円周上の座標が分かれば、なんとかいけそうなのですが、先に進めなくなりました。
経験が浅いですが、どうかご指導のほう宜しくお願いできないでしょうかm_ _m


めじな  2008-01-04 22:14:46  No: 29163

これはプログラムの質問ではないような気もしますが・・・

半径が決まっているので、角度が決まっていればX座標はCos、Y座標はSinで取得出来ます。


めじな  2008-01-04 22:29:19  No: 29164

失礼しました。「楕円」でしたね。
申し訳ないです。。。


KHE00221  2008-01-04 22:50:59  No: 29165

斜め楕円の書き方だけど

http://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/samples/00593.html

http://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/samples/00601.html

あたりが参考になるかな?


mori  2008-01-04 23:01:54  No: 29166

>めじな様
確かに楕円で上記の方法をやるのは厳しいですね(><)
わざわざありがとうございます。

>KHE00221様
少々難しいプログラムですが、参照にしてみようと思います。
ご好意に感謝します。


まきぞえ  2008-01-05 10:04:24  No: 29167

真琴:「もう、なんで皆、この二人の巻き添えで海に落とされなきゃいけないの?」
広海:「でも、お互い水かけっこして大ハシャギしたし、ケッコウ楽しかったじゃん」
春子:「そうよねぇ…あっ、これ、来年からココの名物正月行事にしてもいいかも」
真琴:「さすが、ハルコ社長、もう営業のこと考えてる…」
裕子:「イヤよ、こんな寒い名物、アタシ、もう絶対お正月はココ来ない」
海都:「オレも寒いの苦手だから、もう勘弁してってカンジだね」
広海:「ダメだねぇ、キミ達、若いもんがそんなことじゃ」
裕子:「だぁってぇ〜」

真琴:「ねぇ、カイトさん、ちょっと聞きたいんだけど…」
海都:「ん?マコトちゃん、なに?」
真琴:「Canvasに描いた標準の楕円上の点(x,y)はどうやって求めればいいの?」
広海:「あれ? 急に話が変わったね、ま、オレにはついていけない話だけど」
海都:「あ、それを求めるには、中心を(0,0)にシフトした方が簡単だから…」

中心座標が(0,0)の標準楕円の
長軸の長さを 2a、
短軸の長さを 2b とすると、
楕円上の点(x,y)の関係は、
 (x*x / a*a)+(y*y / b*b) := 1;
これから、ある x の値に対する y の正の値は、
 y := Sqrt((a*a * b*b - x*x * b*b) / (a*a));

海都:「この計算結果から、中心座標を実際のCanvas上の座標に戻せば (x,y)の値が求まるよ」
真琴:「そっか、この式で計算してから座標シフトすればいいのね、カイトさん」
海都:「そう、xの範囲には注意して」

procedure TForm1.Button1Click(Sender: TObject);
var
 x, y, a, b: Integer;
 h1, v1, h2, v2: Integer;
begin
 with Image1 do begin
  h1 := 10;
  v1 := 10;
  h2 := Width-20;
  v2 := Height-40;
  Canvas.Ellipse(h1, v1, h2, v2);
  a := (h2 - h1) div 2;
  b := (v2 - v1) div 2;
  x := -a;
  while x <= a do begin
   y := Round(Sqrt((a*a * b*b - x*x * b*b) / (a*a)));
   Canvas.Ellipse(a+h1+x-4, b+v1-y-4, a+h1+x+4, b+v1-y+4);
   inc(x, 5);
  end;
 end;
end;

春子:「ねぇ、カイトさんとヒロミくんは、今日ここに泊まるでしょ?」
海都:「うん、まだ濡れた服も乾かなくて…、前の社長の服を借りてる状態だし…」
広海:「あの、オレ、カネないんで、従業員部屋でいいから」
真琴:「えぇ〜? じゃ、宿泊代のかわり 二人で掃除と今夜からの食事当番してよネ」
海都:「あっ、コイツとは一緒にしないで…、オレは、"客"だから」
広海:「そのセリフ、久しぶり〜、もしかして、また財布なくしてたりして…」
海都:「そんな 同じドジするかよ、財布ならチャンとポケットに…、ン?あれ?」
春子:「えっ、ないの? じゃ、二人とも従業員部屋にご案内…って、部屋の場所は分かってるか^^」


もにゃ  2008-01-06 00:19:12  No: 29168

楕円だって三角関数使えますよ…


いや  2008-01-06 03:43:36  No: 29169

まきぞえさんの示したのは、座標xに対するyの求め方、
三角関数を使うのははある角度に対する座標の求め方、なわけで、
どちらが欲しいかは質問者さんは示していませんよ。


Mr.XRAY  2008-01-07 09:35:46  No: 29170

みなさん丁寧にレスしているところ,水を差すようですが,
この質問文の内容だけでは正確な解答はできないと思います.

>円周上の座標が分かれば、なんとかいけそうなのですが、先に進めなくなりました。
(これは当たり前ですね!?)

まず,この「円周上の座標」の意味が不明です.
この座標がどのようにして決定されるのが問題です.
一つは,楕円の長軸と短軸の,楕円の中心座標からの位置から決めるのか,
あるいは,楕円の中心からの,ある方向からの角度に対するものなのか,
あるいは,惑星の軌道のように,ある位置を基準にして,一定時間経過後の座標値(点)なのか.
あるいは,誰かが楕円上に点を打ったときの,その座標点なのか,
あるいは...

一体全体この座標(の点)を誰が,どのようにして決めるのかがわからない限り,どうにも
ならないと思いますが...
それがわかれば,その座標の「座標値」を求めるのは単なる数学的な問題となります.
このことを知っているのは当然ですが,質問された方ということになります.
つまり,他の方には質問された方が考えていることは,質問の文章からは理解でき
ないと思いますよ.それとも私だけかな?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加