円を描くアルゴリズムが実は楕円を描くアルゴリズム

たいにゃんさんによる円を描くアルゴリズムがどうして楕円になっていたかの考察
3
たいにゃん @bugnekotinyan

有名な円を描くアルゴリズムが実は楕円をかくアルゴリズムだと知る。そういえば昔に、刻み幅をでかくしたときに変な形になるな、で終わらずに、これは楕円だ。と気づけないあたりが自分の限界なのだ。 parametron.blogspot.jp/search/label/%…

2014-09-25 20:15:00
たいにゃん @bugnekotinyan

なんで楕円になるんだろう。変換行列は 1 -e e 1-e^2 だな。45度回った楕円を楕円にうつすやつと同じになるのかなこれが

2014-09-25 21:29:01
たいにゃん @bugnekotinyan

45度傾いた楕円を同じ楕円への一次変換の(45度回す、縦横1にあわせる、少し回転する、縦横戻す、45度元の方向に回す)a00を1になるようにすると、 1 e e 1-e^2 という形の行列になる。 (続く)

2014-09-26 01:57:54
たいにゃん @bugnekotinyan

このときのeの値で回転角が決まり、それによって楕円の長軸と短軸の比が決定する。 一見単なる刻み幅に見えるが、それが長軸短軸の比に影響するため、eをおおきくしていくと、斜め45度に傾いた楕円がかかれる。eを小さくすることで近似的に円になる。

2014-09-26 02:01:57
たいにゃん @bugnekotinyan

A00=cosΘ+1/2*sinΘ(√a / √b + √b / √a) これを1にした時点で、回転角と長径短径に制限が発生し、 e=1/2*(√b / √a + √a / √b) * sinΘ を決めた時点で、Θと長径短径の比の方程式が2つになり決定する

2014-09-26 02:09:09
たいにゃん @bugnekotinyan

こんなかんじですかにゃ。 さいしょに思いついた人は楕円からは発想してないと思う。 おそらくは X -= e*y Y += e*x これはその点での接線方向へ少しのばす操作です。これをやって一周したら半径がデカくなってうむむ、となって

2014-09-26 02:12:15
たいにゃん @bugnekotinyan

変換行列 1 -e e 1 のΔ=1+e^2なのででかくなることにきがついて、 Δ=1になるように考えて 1 -e e 1-e^2 ならよいだろう、1-e^2をつくるには・・・そうだ新しいXを使えばうまくいくじゃん というかんじじゃないかと

2014-09-26 02:14:47
たいにゃん @bugnekotinyan

あくまで想像なので、もしかしたら、 「DDAっぽく高速で円かきたいんだけど」 「ああ、それなら斜めの楕円を書くアルゴリズムつくったから、それの刻み幅を小さくすれば十分円に見えるよっ!」 みたいなでき方なのかもしれません。

2014-09-26 02:17:30
たいにゃん @bugnekotinyan

なんで45度回転させてんだろうとおもったけど、円や回転させていない楕円だと、うまい行列ができないんだよね。 同じことを、ただの楕円でA00=1にするとcosΘ=1になってしまい、そこで終了。もちろん円もダメです

2014-09-26 02:44:04
たいにゃん @bugnekotinyan

手を抜くためにはものすごい手間が必要である

2014-09-26 02:51:19