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

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

ただいまの
回答率

90.50%

  • C++

    3455questions

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

  • OpenGL

    167questions

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

接戦ベクトルについて

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 206

windowsaa

score 8

個のコードはx,yの位置ベクトルを微分して位置ベクトルの描画に接戦ベクトルを書き込みたいと考えています。

が傾きがおかしくなってしまいます。

どこを訂正したら正しく描画できますか?

#include<iostream>        //C言語標準ライブラリのインクルード
#include<GL/glut.h>       //GLUTヘッダファイルのインクルード
#include<GL/gl.h>         //GLヘッダファイルのインクルード
#include<math.h>


double clt[4][3] =
{
    { 1,2,0 },
    { 2,3,0 },
    { 3,1,0 },
    { 5,1,0 },
};

//プロトタイプ宣言

void init(void);
void keyboard(unsigned char key, int x, int y);
void display(void);
void resize(int w, int h);


int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    /* ウィンドウの生成 */
    glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE | GLUT_DEPTH);
    glutInitWindowPosition(200, 50);
    glutInitWindowSize(400, 400);
    glutCreateWindow(argv[0]);
    init();
    glutReshapeFunc(resize);
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutMainLoop();

    return 0;
}

void keyboard(unsigned char key, int x, int y)
{
    switch (key) {
    case '\33':
    case 'q':
    case 'Q':
        exit(0);
        break;
    default:
        break;
    }
}


void display(void)
{

    float x, y, x1, y1, x2, y2, t, s;

    float length = 0;

    for (s = 0.0; s<1.1; s += 0.1)
    {

        glLineWidth(1.0f);
        glBegin(GL_LINE_STRIP);
        glColor3f(0.0, 1.0, 0.0);

        x = pow((1 - s), 3) * clt[0][0] + 3 * pow((1 - s), 2)*s * clt[1][0] + 3 * (1 - s)*pow(s, 2) * clt[2][0] + pow(s, 3) * clt[3][0];
        y = pow((1 - s), 3) * clt[0][1] + 3 * pow((1 - s), 2)*s * clt[1][1] + 3 * (1 - s)*pow(s, 2) * clt[2][1] + pow(s, 3) * clt[3][1];

        x1 = -3 * pow((1 - s) ,2) * clt[0][0]+  3 * s * (1 - s) * (1 - 3 * s) * clt[1][0] + 3 * s * (2 - 3 * s) * clt[2][0] + 3 * pow(s,2)*   clt[3][0];
        y1 =  3 * pow((1 - s), 2) * clt[0][1] + 3 * s * (1 - s) * (1 - 3 * s) * clt[1][1] + 3 * s * (2 - 3 * s) * clt[2][1] + 3 * pow(s, 2) * clt[3][1];

        length = sqrt(x1*x1 + y1*y1);

        std::cout << length << std::endl;


        for (x2 = x; x2 <= x + x1; x2 += 0.01)
        {
            if (x1 == 0)
            {
                glVertex2f(x, y);
                glVertex2f(x, y1);
            }
            else
            {
                y2 = (y1 / x1)*(x2 - x) + y;
                glVertex2f(x2, y2);
            }
        }
        glEnd();
    }


    glColor3f(1.0, 0.0, 0.0);

    glBegin(GL_LINE_STRIP);

    for (t = 0; t<1.1; t += 0.1)
    {

        x = pow((1 - t), 3) * clt[0][0] + 3 * pow((1 - t), 2)*t * clt[1][0] + 3 * (1 - t)*pow(t, 2) * clt[2][0] + pow(t, 3) * clt[3][0];
        y = pow((1 - t), 3) * clt[0][1] + 3 * pow((1 - t), 2)*t * clt[1][1] + 3 * (1 - t)*pow(t, 2) * clt[2][1] + pow(t, 3) * clt[3][1];

        glVertex2f(x, y);
    };

    glEnd();

    glFlush();

}


void resize(int w, int h)
{


    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    if (w <= h)
        glOrtho(-5.0, 20.0, -5.0*(GLfloat)h / (GLfloat)w,
            12.5*(GLfloat)h / (GLfloat)w, -10.0, 5.0);
    else
        glOrtho(-5.0*(GLfloat)w / (GLfloat)h,
            5.0*(GLfloat)w / (GLfloat)h, -5.0, 5.0, -5.0, 5.0);
    glScalef(3, 3, 3);
}


void init(void)
{
    glClearColor(0.0, 0.0, 0.0, 0.0);
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

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

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C++

    3455questions

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

  • OpenGL

    167questions

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