質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1528閲覧

glBegin();を使って楕円を描画する方法が知りたい

退会済みユーザー

退会済みユーザー

総合スコア0

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/06/19 11:15

提示画像の矢印の楕円ですが横の伸びる楕円を実装したいのですが上手く実装出来ません。どういった数式を用いるのでしょうか?

参考サイト: https://math.nakaken88.com/textbook/basic-ellipse-parametric-representation/

イメージ説明

cpp

1 2 // ##################################### 楕円 描画 ##################################### 3 void DrawOval(glm::vec2 pos, GLfloat size, glm::vec4 color) 4 { 5 float dx = 1.0f / (FrameWork::getWindowContext()->getSize().x / 2); 6 float dy = 1.0f / (FrameWork::getWindowContext()->getSize().y / 2); 7 float c = 1.0f / 255.0f; 8 glColor4f(color.x * c, color.y * c, color.z * c, color.w * c); //カラー 9 10 pos.x = (pos.x * dx) - 1.0f; 11 pos.y = 1.0f - (pos.y * dy); 12 13 glBegin(GL_TRIANGLE_FAN); 14 15////////////////////////////////////////////////////////////////////////////////////////// 16 float r = 100; 17 float num = size; 18 float f = (PI * 2) / num; 19 float ff = 0; 20 for (int i = 0; i < num; i++) 21 { 22 float x = cos(ff) * (r * dx); 23 float y = sin(ff) * (r * dy); 24 25 glVertex2f(pos.x + x + (sin(ff) * (r * dy)), pos.y + y); 26 27 ff += f; 28 } 29///////////////////////////////////////////////////////////////////////////////////////// 30 31 32 33 glEnd(); 34 glFinish(); 35 36 } 37 38

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

「円」を描画する手段を用意し,
「楕円」は,それを適当に変換すれば良いのではないでしょうか.
glRotated とか glScaled とかそういうので.


どういった数式

と問われたならば,結局は「上記のことで行われる演算」ということになります.
「円を引き延ばし(あるいは縮め),回転し,所望の位置に平行する」という.

  • スケーリング変換の行列を S
  • 回転変換の行列を R
  • 平行移動のための行列を T

とすれば,「円」の周上の座標 p から,

結果座標(所望の楕円の周上の座標) = T * R * S * p

とかして計算してやればいい.
(あなたがいつもやっていることですよね)

投稿2021/06/22 03:03

編集2021/06/22 03:32
fana

総合スコア11658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問