No.5ベストアンサー
- 回答日時:
#3です。
> 最初は、90度で上を向いていてそこからプログラムが始まります。
> ですので三角形は、30度右に曲がる必要があります。
ということは,
図にすると,すごくイビツになってしまいましたが,
次の図のような正三角形になるということですか。
(イビツで正三角形に見えませんが...)
↑上(最初の向き)
□■□□□□□□□□□□□□
□■□□□□□□□□□□□□
□■□□□□■□□□□□□□
□■□□□■□■□□□□□□
□■□□■□□□■□□□□□
□■□■□□□□□■□□□□
□■■□□□□□□□■□□□
■■■■■■■■■■■■■■ →横(右)
□■□□□□□□□□□□□□
ということは,
#4 の方の書かれていらっしゃる,
> 自分は画面左下にいて画面上方向を見ているっていうのが
> デフォルト状態なのでは?
ということになりますね。ご名答。
すると四角形だと,こういうことでしょうか?↓
↑上(最初の向き)
□■□□□□□□□□□□□□
□■□□□□□□□□□□□□
□■■■■■■■■■■■□□
□■□□□□□□□□□■□□
□■□□□□□□□□□■□□
□■□□□□□□□□□■□□
□■□□□□□□□□□■□□
□■□□□□□□□□□■□□
□■□□□□□□□□□■□□
■■■■■■■■■■■■■■
□■□□□□□□□□□□□□
五角形だと...,こういうこと?↓
↑上(最初の向き)
□□□□■□□□□□□□□□□□□□□
□□□□■□□□□■□□□□□□□□□
□□□□■□□■■□■■□□□□□□□
□□□□■■■□□□□□■■□□□□□
□□□■■□□□□□□□□□■■□□□
□■■□■□□□□□□□□□□□■■□
□□■□■□□□□□□□□□□□■□□
□□■□■□□□□□□□□□□□■□□
□□□■■□□□□□□□□□□■□□□
□□□■■□□□□□□□□□□■□□□
□□□□■□□□□□□□□□■□□□□
■■■■■■■■■■■■■■■■■■■
□□□□■□□□□□□□□□□□□□□
そうではない可能性も考えられますが...,
素直に考えれば上のようになるような気がします。
上のようになるという規則に従うものとして,以下を回答します。
もし上のような規則で正n角形を描くのであれば,
「上方向」を最初の向きの基準として,なおかつ,
「右に曲がる」というルールを基準として考えるとややこしくなります。
ですからまず,
「右方向」を最初の向きの基準として,なおかつ,
「左に曲がる」というルールを基準として考えます。
最初は「右方向」を向いているとします。
三角形だと,180-360÷3=60 度左に曲がらなければなりません。
四角形だと,180-360÷4=90 度左に曲がらなければなりません。
五角形だと,180-360÷5=108 度左に曲がらなければなりません。
六角形だと,180-360÷6=120 度左に曲がらなければなりません。
… … …
n角形だと,180-360÷n 度左に曲がらなければなりません。
上の式の,
「360÷n」の部分は,#3で回答した角度と同じです。
これは,正多角形の外角の意味にもなります。
多角形の内角と外角の和は180度ですから,
正n角形の1つの内角は 180-360÷n になると考えても良いです。
しかし本当は,
「左に曲がる」というルールではなく「右に曲がる」というのがルールですから,
上のものの数値をマイナスにしなければなりません。
したがって,上の物は次のように書き替える必要があります。
最初は「右方向」を向いているとします。
三角形だと,360÷3-180=-60 度右に曲がらなければなりません。
四角形だと,360÷4-180=-90 度右に曲がらなければなりません。
五角形だと,360÷5-180=-108 度右に曲がらなければなりません。
六角形だと,360÷6-180=-120 度右に曲がらなければなりません。
… … …
n角形だと,360÷n-180 度右に曲がらなければなりません。
しかし,さらに本当は,
最初は「右方向」を向いているのではなく,「上方向」を向いているのですから,
90度はすでに左に向いてしまっています。
ですからさらに 90 度右に向けさせる必要が出てきます。
したがって,次のように書き替える必要があります。
最初は「上方向」を向いているとします。
三角形だと,360÷3-180+90=30 度右に曲がらなければなりません。
四角形だと,360÷4-180+90=0 度右に曲がらなければなりません。
五角形だと,360÷5-180+90=-18 度右に曲がらなければなりません。
六角形だと,360÷6-180+90=-30 度右に曲がらなければなりません。
… … …
n角形だと,360÷n-180+90 度右に曲がらなければなりません。
つまり
n角形だと,360÷n-90 度右に曲がらなければなりません。
したがって,1辺100歩の正n角形を描くプログラムの公式は次のようになります。
--------プログラム-----------------
360/n -90 度右に曲がる。
{100歩進む。360/n 度右に曲がる。}
ことをn回繰り返す。
--------------------------------
やれやれと...,
答えがやたら簡単な割には長い説明になってしまいましたね。
説明のしかたが悪くてすみません。
本題は以上です。
////////////////////////////////////////////////////////
あと最初に思ったことです。
ふと個人的に思っただけのことなので,以下は適当に聞き流してください。
そのプログラミングを続ける先の話ですが,
角度が常に「○度右に曲がる」 という前の状態に対する相対的な角度ですよね。
ですから,上のプログラムは,
「歩く物体をこの方向に向ける」という絶対座標系でのプログラミングには向いていません。
ですから,続けて考える場合,
「○度右に曲がる」 というのは,動く物体自体を○度回転させるのではなく,
座標系全体を 「○度右に回転させる」 という意味のプログラムとして扱うと簡単になるような気がします。
例えば,物体自体は,
モニタ上に線を引きながら,常に同じ速さで常に同じ方向に歩くようにさせます。
そして 物体 が 100歩 歩く度に,歩いている地面を,物体を中心に「○度右に回転」させます。
すると,
モニタ上には正n角形が自動的に作図されます。
そういう感じで動作するものにすると,
sin とか cos とか atan2 とかは登場させなくても,
「○度右に回転」 だけで済むプログラムになるかもしれません。
個人的には Flash というソフトで ActionScript という言語を専門にしています。
その Flash で,
上の座標系の回転という考え方をとり入れれば
次のようになります(関係ない話だと思いますが)。
ステージ上(_root)に
座標系の役割を果たす A というオブジェクト(空のムービークリップ)の中に,
動かす物体 B というオブジェクト(ムービークリップ)を作成します。
オブジェクトの階層構造を次のようにすると言うことです。
_root
└A
└B
そして,次のようなプログラムコードを書くと,
モニタ上で見た目 B が n角形をえがくように動きます。
------------------------------------------
// 変数 n の初期値を定義(この場合三角形)
n = 3;
// オブジェクトA を 360/n -90 度右に回転させる
A._rotation += 360/n-90;
// ユーザ定義関数 idouKaiten を定義
function idouKaiten() {
// オブジェクトA の中の オブジェクトB を 1px 上向きに動かす
A.B._y -= 1;
// A の中の B の座標が -100 以下になれば
if (A.B._y<=-100) {
// B の絶対座標を算出
myPoint = {x:0, y:0};
A.B.localToGlobal(myPoint);
// A を B の絶対座標まで動かす
A._x = myPoint.x;
A._y = myPoint.y;
// A を 360/n 度回転させる
A._rotation += 360/n;
// A の中の B を原点に戻す
A.B._y = 0;
}
}
// 1フレーム進む時間ごとに毎回 上の idouKaiten を実行
_root.onEnterFrame = idouKaiten;
------------------------------------------
(↑単なる イメージ や フロー ではなく,
Flash(Flash MX以上)で実際に動作するコードです。)
オブジェクトA の中の B は,ひたすら
A.B._y -= 1; (A.B._y = A.B._y - 1 の意味です)
で,A の中を上に動き続けます。
そしてもし 100px 以上,上方向に動けば
if (A.B._y<=-100)
最初の場所に戻されるだけです。
// A の中の B を原点に戻す
A.B._y = 0;
その B を最初の場所に戻す寸前に,
B の外側にある(親に当たる) A の座標を
B の絶対座標と一致させる と同時に, 360/n 度回転させます。
すると,
B は A の中で1pxずつ上に動き続けるだけなのに,
A の外にあるモニタでは B はn角形を描画するように動いて見えます。
sin や cos などが出てこないプログラム例です。
全然関係ないプログラムを作られているのだとは思いますが,
座標系自体を回転させるという考え方が何かのヒントになりましたらと思い,
付けくわえさせていただきました。
以上,私個人の勝手なつぶやきだと思って,適当に聞き流してください。
No.4
- 回答日時:
#3さま
>最初に登場する 「30度右に曲がる。」 の 30度 が,
>何を根拠(基準)として出てくる 30度 なのかがわかりません。
自分は画面左下にいて画面上方向を見ているっていうのがデフォルト状態なのでは?
それで、三角形をピラミッドのような向きで表示したいと、、、
aya_aya123さま
>では、5角形は、どうなりますか?
>6角形や8角形では、どうなりますか?
上の三角形の場合でいう30°を加味したアルゴリズムも必要ですか?
回答ありがとうございました。
三角形の場合でいう30°を加味したアルゴリズムも必要です。
最初は、90度で上を向いていてそこからプログラムが始まります。
ですので三角形は、30度右に曲がる必要があります。
6角形や8角形でも必要です。
No.3
- 回答日時:
最初に登場する 「30度右に曲がる。
」 の 30度 が,何を根拠(基準)として出てくる 30度 なのかがわかりません。
その部分は除いたとすると,
三角形だと,360÷3=120 度ずつ 3回 曲がると元の原点に戻って最初の方向を向きますね。
四角形だと,360÷4=90 度ずつ 4回 曲がると元の原点に戻って最初の方向を向きます。
五角形だと,360÷5=72 度ずつ 5回 曲がると元の原点に戻って最初の方向を向きます。
六角形だと,360÷6=60 度ずつ 6回 曲がると元の原点に戻って最初の方向を向きます。
… … …
n角形だと,360÷n 度ずつ n回 曲がると元の原点に戻って最初の方向を向きます。
したがって,
--------プログラム--------
30度右に曲がる。
{100歩進む。360/n 度右に曲がる。}
ことをn回繰り返す。
--------------------------------
となると思いますが......
最初の30度は何なのでしょうかね?
よくわかりませんが,一応回答しました。
回答ありがとうございました。
三角形の場合でいう30°を加味したアルゴリズムも必要です。
最初は、90度で上を向いていてそこからプログラムが始まります。
ですので三角形は、30度右に曲がる必要があります。
6角形や8角形でも必要でどうなるのでしょうか。
No.1
- 回答日時:
中心点(xc, yc)で半径rの円周上にn角形の頂点があるものとして
1. 0度から360度までを360/nステップで増加する
2. 度をラジアンに変換し、それをaとする
3. x = xc + r * cos( a ), y = yc + r * sin( a )
4. 0度のときは座標(x,y)に移動する、それ以外のときは座標(x,y)まで線を引く
5. 1.から繰り返す
とすればとりあえずn角形は描けます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 地図・道路 この路面標識の意味を教えてください。 5 2022/11/23 16:34
- 数学 右の図で、BCの長さを四捨五入して、 小数第1位まで求めなさい。 図は三角形ABCで、∠Aが50度、 3 2022/07/28 01:17
- 数学 AB=2,BC=3,∠ABC=60°の三角形がある。 点Aから辺BCに垂線を下ろし辺BCとの交点をD 4 2023/02/02 15:55
- その他(車) 普通の交差点で、左折時にフックをして曲がるというのは教習所で習うのですか? 1 2022/03/26 15:07
- C言語・C++・C# 画像の画素値を変えるC言語のプログラムで指定された画像の中に白い三角形を右上に表示させるにはどのよう 3 2022/10/30 01:16
- 数学 『弧は弦より長し』 8 2022/04/18 10:23
- 数学 正五角形の頂点を反時計回りにabcdeとする。二つの動点r、wが、rは頂点aを、w頂点cを出発して次 3 2022/07/22 11:40
- 怪我 高2です 2週間前ぐらいから右腕の関節が とある角度にすると痛くて、 腕立ての形になったりするのがで 1 2022/10/29 20:21
- 運転免許・教習所 写真の標識について(逆走運転をしないために) 3 2023/04/25 10:53
- アニメソング・ボーカロイド 多分初音ミクだと思う曲があるのですが、イラストは分かるのですが曲が分かりません 誰か教えてください。 1 2023/06/18 02:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
始点、終点の二つの座標と半径...
-
C言語 配列で座標
-
3次元空間上の2つの座標から...
-
直線と傾きのある楕円の交点を...
-
閉図形の座標の配列が右回りか...
-
ダイアログ内コントロールの位...
-
エクセルシート上のマウスポイ...
-
Excel VBA で自在に図形を変化...
-
ワード上Shapeの位置情報を統一...
-
∠ABCに内接する円の中心・接点...
-
当たり判定後に面に沿って動か...
-
座標を持った平面範囲に座標を...
-
Javaで・・・
-
マウス座標からリストボックス...
-
差分法による数値解析でヤコビ...
-
Cで回転プログラムの高速化を
-
DirectXを使ってテクスチャ(画...
-
CSVを読み込んで人体骨格を描画...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マインクラフト(pc版)で座標...
-
グラフの交点の求め方(Excel)
-
エクセルで回転する座標の出し方
-
閉図形の座標の配列が右回りか...
-
3次元空間上の2つの座標から...
-
エクセルである点からの距離で...
-
求積表の計算方法
-
ダイアログ内コントロールの位...
-
空間上の二点を結ぶ直線上に任...
-
始点、終点の二つの座標と半径...
-
図形が重なりあっているかどうか
-
ワード上Shapeの位置情報を統一...
-
以下のプログラムは重心を求め...
-
シーケンサー(PLC?)で制...
-
ピクチャボックスの座標取得
-
多角形の内部かどうか判定する方法
-
Excel VBA で自在に図形を変化...
-
選択範囲の座標値の抽出
-
座標を持った平面範囲に座標を...
-
VBで、開いているExcelシートの...
おすすめ情報