放物線を描く方法

本物のページはこちら→parabola

Included page "parabola" does not exist (create it now)

$p_{x}$焦点のx座標
$p_{y}$焦点のy座標
$a$…焦点からまっすぐに準線へ垂直にひいた線の長さの半分$d-p_{y}$
$d$…準線のy座標

(1)
\begin{align} r=\frac{(d-p_{y})}{(1+ cos \theta)} \end{align}
(2)
\begin{align} x=p_{x}+r cos \theta \end{align}
(3)
\begin{align} y=p_{y}+r sin \theta \end{align}

放物線の頂点

(5)
\begin{equation} y=a(x-p)^2+q \end{equation}

の場合頂点座標は$(p,q)$になる。

ソースコード

void CParabola::SetParabola(CVertex *_focus,double _directrix){
    this->focus=*_focus;
    CVertex point;
    point.SetVertex(_focus->x,_directrix);
    this->a=point.CalcLength(_focus)*0.5;
    this->directrix=_directrix;
}
void CParabola::DrawParabola(float r,float g,float b){
    glColor3f(r,g,b);
    glBegin(GL_LINE_LOOP);
    for(int rate=-PARABOLAREALITY;rate<PARABOLAREALITY;rate++){
        double x,y;
        double r=0;
        double theta=2*M_PI/(double)rate;
        r=2*this->a/(1+cos(theta));
        x=r*sin(theta)+this->focus.x;
        y=r*cos(theta)+this->focus.y;
        glVertex2d(x,y);
    }
    glEnd();
}

directrix.jpg

関連事項

二つの放物線の交点の軌跡…準線をtとしてどんどん下にずらしていったとき

サポートサイト Wikidot.com