掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
円周上に図形を描くには? (ID:29167)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
真琴:「もう、なんで皆、この二人の巻き添えで海に落とされなきゃいけないの?」 広海:「でも、お互い水かけっこして大ハシャギしたし、ケッコウ楽しかったじゃん」 春子:「そうよねぇ…あっ、これ、来年からココの名物正月行事にしてもいいかも」 真琴:「さすが、ハルコ社長、もう営業のこと考えてる…」 裕子:「イヤよ、こんな寒い名物、アタシ、もう絶対お正月はココ来ない」 海都:「オレも寒いの苦手だから、もう勘弁してってカンジだね」 広海:「ダメだねぇ、キミ達、若いもんがそんなことじゃ」 裕子:「だぁってぇ〜」 真琴:「ねぇ、カイトさん、ちょっと聞きたいんだけど…」 海都:「ん?マコトちゃん、なに?」 真琴:「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; 春子:「ねぇ、カイトさんとヒロミくんは、今日ここに泊まるでしょ?」 海都:「うん、まだ濡れた服も乾かなくて…、前の社長の服を借りてる状態だし…」 広海:「あの、オレ、カネないんで、従業員部屋でいいから」 真琴:「えぇ〜? じゃ、宿泊代のかわり 二人で掃除と今夜からの食事当番してよネ」 海都:「あっ、コイツとは一緒にしないで…、オレは、"客"だから」 広海:「そのセリフ、久しぶり〜、もしかして、また財布なくしてたりして…」 海都:「そんな 同じドジするかよ、財布ならチャンとポケットに…、ン?あれ?」 春子:「えっ、ないの? じゃ、二人とも従業員部屋にご案内…って、部屋の場所は分かってるか^^」
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.