Форум программистов, компьютерный форум CyberForum.ru

Построение кривой Безье - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Датчик случайных чисел http://www.cyberforum.ru/cpp-beginners/thread182477.html
С помощью датчика случайных чисел получить 10 вещественных чисел от -50 до 50 #include <iostream> #include <ctime> using namespace std; void main() { double n;
C++ Номер строки в матрице Здравствуйте, вот задача, помогите пожалуйста: Определить номер строки с минимальным количеством нулевых элементов и сложить элементы этой строки с элементами всех нечетных строк. Весь код необязателен, только блоки с поиском строки и ее сложением. Заранее благодарен! http://www.cyberforum.ru/cpp-beginners/thread182469.html
Разные экземпляры класса ? C++
Есть класс Visitor и в нем объявленна функция void visitor:: enterToPark(jurassicPark jp){ //Trying to enter to park at every random 10 seconds if he isn't in park if (isInsidePark != true) { //cout << randomTime << endl; if ((int)t.elapsedTime() == randomTime) { jp.addNewVisitor(); isInsidePark = true; cout << jp.showNumInPark();
Удалить из первой строки символы, которых нет во второй C++
Составить процедуру, в результате обращения к которой из первой заданной строки удаляется каждый символ, принадлежащий и второй заданной строке.
C++ В тех словах, которые оканчиваются сочетанием букв ing, заменить окончание на ed http://www.cyberforum.ru/cpp-beginners/thread182461.html
Дан текст. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелы внутри себя, будем называть словами. В тех словах, которые оканчиваются сочетанием букв ing, заменить это окончание на ed.
C++ Функция вывода символа по коду его клавиши: есть ли такая? Собственно, мне нужно выводить на экран буквы от a до какойто буквы вплоть до z. Так как коды букв идут последовательно, напрашивается решение: сделать цикл, начинающийся с кода буквы a и до нужной буквы, а под циклом функция, которая в зависимости от кода выводит на экран буквы. Но функции такой я не знаю. Есть ли она? подробнее

Показать сообщение отдельно
Iworb
анимешник++
93 / 60 / 2
Регистрация: 03.11.2009
Сообщений: 413

Построение кривой Безье - C++

27.10.2010, 17:28. Просмотров 4090. Ответов 0
Метки (Все метки)

Вобщем написал я код для построения, но почему-то оно строит кривую от точки (0,0) до первой точки вектора, а нужно, чтобы от первой точки вектора до последней. Сам не вижу ошибки, может кто заметит-поможет:
(рисование с помощью Opengl, на поля точки vx и vy не обращайте внимания - скучно было, сделал чуток анимации(реализует timer))
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include <vector>
#include <cmath>
#include <conio.h>
#include <iostream>
#include <Windows.h>
#include <GL/glut.h>
#define MXS 0.2 //max x speed
#define MYS 0.2 //max y speed
#define SIZE (20*rand()/RAND_MAX+2) //num of points
using namespace std;
 
struct point
{
    float x;
    float y;
    float vx;
    float vy;
};
 
vector <point> p;
 
void DrawCurve();
void print();
float GetX(float t);
float GetY(float t);
 
float C(int m, int k)
{
    int v;
    float r=1;
    v=(m-k)<k?m-k:k;
    for(int i=0;i<v;i++) r*=((m-i)/(v-i));
    return r;
}
 
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    DrawCurve();
    glFlush();
}
 
void DrawCurve()
{
    glColor3f(1,1,0);
    glPointSize(5);
    glBegin(GL_POINTS);
    for(int i=0;i<p.size();i++)
        glVertex2f(p.at(i).x,p.at(i).y);
    glEnd();
    glPointSize(1);
    glColor3f(1,1,1);
    glBegin(GL_LINE_STRIP);
    for(float t=0;t<=1;t+=0.005)
        glVertex2f(GetX(t),GetY(t));
    glEnd();
}
 
void print()
{
    cout<<"Size: "<<p.size()<<endl;
    for(int i=0;i<p.size();i++)
    cout<<"x: "<<p.at(i).x<<" y: "<<p.at(i).y<<endl;
}
 
float GetX(float t)
{
    float value=0;
    for(int i=0;i<p.size();value+=C(p.size(),i)*pow((float)t,i)*pow((float)(1-t),(float)(p.size()-i))*p.at(i).x,i++);
    return value;
}
 
float GetY(float t)
{
    float value=0;
    for(int i=0;i<p.size();value+=C(p.size(),i)*pow((float)t,i)*pow((float)(1-t),(float)(p.size()-i))*p.at(i).y,i++);
    return value;
}
 
void timer(int i=0)
{
    for(int i=0;i<p.size();i++)
    {
        p.at(i).x+=p.at(i).vx;
        p.at(i).y+=p.at(i).vy;
        if(p.at(i).x>100) p.at(i).x-=100;
        if(p.at(i).x<0) p.at(i).x+=100;
        if(p.at(i).y>100) p.at(i).y-=100;
        if(p.at(i).y<0) p.at(i).y+=100;
    }
    display();
    glutTimerFunc(50,timer,0);
}
 
int main(int argc, char** argv)
{
    srand(GetTickCount());
    for(int i=0;i<SIZE;i++)
    {
        point tp;
        tp.x=100*rand()/RAND_MAX;
        tp.y=100*rand()/RAND_MAX;
        tp.vx=MXS*rand()/RAND_MAX;
        tp.vy=MYS*rand()/RAND_MAX;
        p.push_back(tp);
    }
    print();
    glutInit(&argc, argv);
    glutInitDisplayMode (GLUT_SINGLE|GLUT_RGB);
    glutInitWindowSize(600,600);
    glutInitWindowPosition(0,0);
    glutCreateWindow("Curve");
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0.0, 100, 0.0, 100);     
    glutDisplayFunc(display);
    timer();
    glutMainLoop();
    return 0;
}
Компилится под 10й студией при наличие Opengl файликов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru