Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Rikk
45 / 5 / 1
Регистрация: 10.06.2011
Сообщений: 268
#1

как наложить на кривую безье сплайн - C++

02.10.2011, 10:40. Просмотров 1144. Ответов 2
Метки нет (Все метки)

Всем доброго времени суток! Тут мне такое вот задание преподаватель дал, основную часть работы я сделал, но вот задание...Надо чтобы на кривые безье ещё налагались сплайны, ну и получалось что то вроде пересечения, координаты точки можно сразу задать я вот этого не понимаю
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
#include <conio.h>
#include <stdio.h>
#include <graphics.h>
#include <math.h>
#include <dos.h>
main ()
{
 int driver,mode,q,p,por;
 float fi,alfa,t,r1,r2,a,b,x,y,b1x1,b1y1,b1x2,b1y2,b2x1,b2y1,b2x2,b2y2,b2x3,b2y3,b3x1,b3y1,b3x2,b3y2,b3x3,b3y3,b3x4,b3y4,b4x1,b4y1,b4x2,b4y2,b4x3,b4y3,b4x4,b4y4,b4x5,b4y5;
m: clrscr();
   clrscr;
   driver=DETECT;
   mode=0;
   initgraph(&driver,&mode,"c:\\bc\\bgi");
   textbackground (2);
   setbkcolor (16);
   setcolor (2);
   printf ("1. Spirograf\n");
   printf ("2. Bezier\n");
   printf ("3. Vihod\n");
   scanf ("%ld",&p);
   switch(p)
    {
    case 1:
      {
      clrscr;
      driver=DETECT;
      mode=0;
      initgraph(&driver,&mode,"c:\\bc\\bgi");
      textbackground (2);
      setbkcolor (16);
      setcolor (2);
      printf("Vvedite radius bolshoy okrugnosti: ");
      scanf("%f",&r1);
      printf("Vvedite radius maloy okrugnosty: ");
      scanf("%f",&r2);
      line(0,225,630,225);
      line(300,0,300,450);
      q=0;
      fi=0;
      a=r2;
      b=r2;
      for(alfa=0;alfa<=2*3.14;alfa=alfa+0.001)
    {
    x=r1*cos(alfa);
    y=r1*sin(alfa);
    putpixel(300+x,225-y,3);
    }
   m1:for(alfa=0;alfa<=2*3.14;alfa=alfa+0.001)
    {
    fi=fi+0.01;
    x=(r1+r2)*cos(alfa)+a*cos(fi);
    y=(r1+r2)*sin(alfa)+b*sin(fi);
    putpixel(300+x,225-y,2);
    delay(1);
    }
      q=q+1;
      if(q==1)
    {
    a=r2;
    b=-r2;
    r1=r1-2*r2;
    goto m1;
    }
      getch();
      closegraph();
      goto m;
      }
   case 2:
      {
   m2:printf("\nVvedite porydok krivoy BEZIER(1-4): ");
      scanf("%ld",&por);
      switch(por)
    {
    case 1:
      {
      clrscr;
      driver=DETECT;
      mode=0;
      initgraph(&driver,&mode,"c:\\bc\\bgi");
      textbackground (2);
      setbkcolor (16);
      setcolor (2);
      line(0,225,630,225);
      line(300,0,300,450);
      setcolor (15);
      printf ("Vvedite koordinari rochek");
      scanf ("%f", &b1x1);
      scanf ("%f", &b1y1);
      scanf ("%f", &b1x2);
      scanf ("%f", &b1y2);
      line(300+b1x1,225-b1y1,300+b1x2,225-b1y2);
      setcolor (2);
      for(t=0;t<=1;t=t+0.00001)
        {
        x=(1-t)*b1x1+t*b1x2;
        y=(1-t)*b1y1+t*b1y2;
        putpixel(300+x,225-y,2);
        }
      getch();
      goto m;
      }
    case 2:
      {
      clrscr;
      driver=DETECT;
      mode=0;
      initgraph(&driver,&mode,"c:\\bc\\bgi");
      textbackground (2);
      setbkcolor (16);
      setcolor (2);
      line(0,225,630,225);
      line(300,0,300,450);
      printf ("Vvedite koordinari tochek");
      scanf ("%f", &b2x1);
      scanf ("%f", &b2y1);
      scanf ("%f", &b2x2);
      scanf ("%f", &b2y2);
      scanf ("%f", &b2x3);
      scanf ("%f", &b2y3);
      setcolor (15);
      line(300+b2x1,225-b2y1,300+b2x2,225-b2y2);
      line(300+b2x2,225-b2y2,300+b2x3,225-b2y3);
      setcolor (2);
      for(t=0;t<=1;t=t+0.00001)
        {
        x=pow((1-t),2)*b2x1+2*t*(1-t)*b2x2+pow(t,2)*b2x3;
        y=pow((1-t),2)*b2y1+2*t*(1-t)*b2y2+pow(t,2)*b2y3;
        putpixel(300+x,225-y,2);
        }
      getch();
      goto m;
      }
    case 3:
      {
      clrscr;
      driver=DETECT;
      mode=0;
      initgraph(&driver,&mode,"c:\\bc\\bgi");
      textbackground (2);
      setbkcolor (16);
      setcolor (2);
      line(0,225,630,225);
      line(300,0,300,450);
      printf ("Vvedite koordinari rochek");
      scanf ("%f", &b3x1);
      scanf ("%f", &b3y1);
      scanf ("%f", &b3x2);
      scanf ("%f", &b3y2);
      scanf ("%f", &b3x3);
      scanf ("%f", &b3y3);
      scanf ("%f", &b3x4);
      scanf ("%f", &b3y4);
      setcolor (15);
      line(300+b3x1,225-b3y1,300+b3x2,225-b3y2);
      line(300+b3x2,225-b3y2,300+b3x3,225-b3y3);
      line(300+b3x3,225-b3y3,300+b3x4,225-b3y4);
      setcolor (2);
      for(t=0;t<=1;t=t+0.00001)
        {
        x=pow((1-t),3)*b3x1+3*t*pow((1-t),2)*b3x2\
        +3*pow(t,2)*(1-t)*b3x3+pow(t,3)*b3x4;
        y=pow((1-t),3)*b3y1+3*t*pow((1-t),2)*b3y2\
        +3*pow(t,2)*(1-t)*b3y3+pow(t,3)*b3y4;
        putpixel(300+x,225-y,2);
        }
      getch();
      goto m;
      }
    case 4:
      {
      clrscr;
      driver=DETECT;
      mode=0;
      initgraph(&driver,&mode,"c:\\bc\\bgi");
      textbackground (2);
      setbkcolor (16);
      setcolor (2);
      line(0,225,630,225);
      line(300,0,300,450);
      printf ("Vvedite koordinari rochek");
      scanf ("%f", &b4x1);
      scanf ("%f", &b4y1);
      scanf ("%f", &b4x2);
      scanf ("%f", &b4y2);
      scanf ("%f", &b4x3);
      scanf ("%f", &b4y3);
      scanf ("%f", &b4x4);
      scanf ("%f", &b4y4);
      scanf ("%f", &b4x5);
      scanf ("%f", &b4y5);
      setcolor (15);
      line(300+b4x1,225-b4y1,300+b4x2,225-b4y2);
      line(300+b4x2,225-b4y2,300+b4x3,225-b4y3);
      line(300+b4x3,225-b4y3,300+b4x4,225-b4y4);
      line(300+b4x4,225-b4y4,300+b4x5,225-b4y5);
      setcolor (2);
      for(t=0;t<=1;t=t+0.00001)
        {
        x=pow((1-t),4)*b4x1+4*t*pow((1-t),3)*b4x2\
        +6*pow(t,2)*pow((1-t),2)*b4x3+4*pow(t,3)*(1-t)*b4x4+pow(t,4)*b4x5;
        y=pow((1-t),4)*b4y1+4*t*pow((1-t),3)*b4y2\
        +6*pow(t,2)*pow((1-t),2)*b4y3+4*pow(t,3)*(1-t)*b4y4+pow(t,4)*b4y5;
        putpixel(300+x,225-y,2);
        }
      getch();
      goto m;
      }
    goto m;
    }
      }
    }
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.10.2011, 10:40
Я подобрал для вас темы с готовыми решениями и ответами на вопрос как наложить на кривую безье сплайн (C++):

Как наложить ограничения на ввод данных? - C++
как наложить ограничения на ввод данных? (чтобы не было 1 и 0)

Как наложить свой текст на имеющийся граф.файл в VC++ 6.0 - C++
Посоветуйте пожалуйста, как можно наложить на уже имеющийся граф. файл ( BMP, GIF, JPG etc ) свой текст ? Спасибо.

Как нарисовать гладкую кривую, если есть массив точек, лежащих на ней? - C++
Есть набор точек, лежащих на кривой. Кривая может быть самых причудливых форм. На разных ее участках она описана разными функциями. ...

Кривая Безье в сплайн Безье - Математика
Здравствуйте. Я по специальности программист и мне нужно генерировать замкнутую кривую не пересекающую себя. Наткнулся на кривую Безье, на...

По рисунку нужно написать безье и сплайн - Delphi
Вот по рисунку надо написать безье и сплайн, вот код написал, но тут что то не то, ошибка какая то, рисунок называется кулачёк unit...

Построить кривую Безье в Паскале - Pascal
Всем привет! Задача состоит в том чтобы вывести на экран кривую Безье. Может кто подскажет с чего начать и как делать? Заранее спасибо!

2
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
02.10.2011, 13:27 #2
"Сплайн" - собирательный термин, обозначающий, в том числе, кривые безье. Но не только. Сплайн бывает и NURBS. Каким именно сплайном хочешь пересечь?
0
Rikk
45 / 5 / 1
Регистрация: 10.06.2011
Сообщений: 268
02.10.2011, 13:51  [ТС] #3
Цитата Сообщение от taras atavin Посмотреть сообщение
"Сплайн" - собирательный термин, обозначающий, в том числе, кривые безье. Но не только. Сплайн бывает и NURBS. Каким именно сплайном хочешь пересечь?
Используя B-сплайн второго порядка, вот так вот мне препод сказала
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2011, 13:51
Привет! Вот еще темы с ответами:

Чем плоский B-сплайн отличается от плоского сплайна Безье? - OpenGL
;) Чем плоский B-сплайн отличается от плоского сплайна Безье?

Создание поверхности сдвига сплайн функции Безье. Вай - C#
Ух ребята. Контрольная работа тут у меня. Но не стоит паниковать. Я тут уже чего спрограммулил.. В общем я тоже долго курил что от...

Реализовать кривую Безье по четырем точкам - C#
Помогите,пожалуйста,реализовать кривую Безье по 4-м точкам с помощью Graphics.DrawBezier()

Построить кривую Безье по 4 точкам использовать Bezier - C#
Нужно построить кривую Безье по 4 точкам использовать Bezier (Graphics) код у меня есть и все запускается вот правда не рисует нечего. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru