procedure TForm.FormPaint(Sender: TObject);
begin
Canvas.Ellipse(10,10,Width-20,Height-40);
end.
上のプログラムで楕円を描いた後に、その円周上の座標の一つを中心に
小さな円を描きたいと思っています。
円周上の座標が分かれば、なんとかいけそうなのですが、先に進めなくなりました。
経験が浅いですが、どうかご指導のほう宜しくお願いできないでしょうかm_ _m
これはプログラムの質問ではないような気もしますが・・・
半径が決まっているので、角度が決まっていればX座標はCos、Y座標はSinで取得出来ます。
失礼しました。「楕円」でしたね。
申し訳ないです。。。
斜め楕円の書き方だけど
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
あたりが参考になるかな?
>めじな様
確かに楕円で上記の方法をやるのは厳しいですね(><)
わざわざありがとうございます。
>KHE00221様
少々難しいプログラムですが、参照にしてみようと思います。
ご好意に感謝します。
真琴:「もう、なんで皆、この二人の巻き添えで海に落とされなきゃいけないの?」
広海:「でも、お互い水かけっこして大ハシャギしたし、ケッコウ楽しかったじゃん」
春子:「そうよねぇ…あっ、これ、来年からココの名物正月行事にしてもいいかも」
真琴:「さすが、ハルコ社長、もう営業のこと考えてる…」
裕子:「イヤよ、こんな寒い名物、アタシ、もう絶対お正月はココ来ない」
海都:「オレも寒いの苦手だから、もう勘弁してってカンジだね」
広海:「ダメだねぇ、キミ達、若いもんがそんなことじゃ」
裕子:「だぁってぇ〜」
真琴:「ねぇ、カイトさん、ちょっと聞きたいんだけど…」
海都:「ん?マコトちゃん、なに?」
真琴:「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;
春子:「ねぇ、カイトさんとヒロミくんは、今日ここに泊まるでしょ?」
海都:「うん、まだ濡れた服も乾かなくて…、前の社長の服を借りてる状態だし…」
広海:「あの、オレ、カネないんで、従業員部屋でいいから」
真琴:「えぇ〜? じゃ、宿泊代のかわり 二人で掃除と今夜からの食事当番してよネ」
海都:「あっ、コイツとは一緒にしないで…、オレは、"客"だから」
広海:「そのセリフ、久しぶり〜、もしかして、また財布なくしてたりして…」
海都:「そんな 同じドジするかよ、財布ならチャンとポケットに…、ン?あれ?」
春子:「えっ、ないの? じゃ、二人とも従業員部屋にご案内…って、部屋の場所は分かってるか^^」
楕円だって三角関数使えますよ…
まきぞえさんの示したのは、座標xに対するyの求め方、
三角関数を使うのははある角度に対する座標の求め方、なわけで、
どちらが欲しいかは質問者さんは示していませんよ。
みなさん丁寧にレスしているところ,水を差すようですが,
この質問文の内容だけでは正確な解答はできないと思います.
>円周上の座標が分かれば、なんとかいけそうなのですが、先に進めなくなりました。
(これは当たり前ですね!?)
まず,この「円周上の座標」の意味が不明です.
この座標がどのようにして決定されるのが問題です.
一つは,楕円の長軸と短軸の,楕円の中心座標からの位置から決めるのか,
あるいは,楕円の中心からの,ある方向からの角度に対するものなのか,
あるいは,惑星の軌道のように,ある位置を基準にして,一定時間経過後の座標値(点)なのか.
あるいは,誰かが楕円上に点を打ったときの,その座標点なのか,
あるいは...
一体全体この座標(の点)を誰が,どのようにして決めるのかがわからない限り,どうにも
ならないと思いますが...
それがわかれば,その座標の「座標値」を求めるのは単なる数学的な問題となります.
このことを知っているのは当然ですが,質問された方ということになります.
つまり,他の方には質問された方が考えていることは,質問の文章からは理解でき
ないと思いますよ.それとも私だけかな?
ツイート | ![]() |