Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2010, 12:52   #1
Angel_of_Death
Пользователь
 
Аватар для Angel_of_Death
 
Регистрация: 11.10.2010
Сообщений: 10
По умолчанию 21- конечная звезда

Я не шарю с координатами, вот пример 11 конечной звезды:
Код:
glBegin(GL_POLYGON); // звезда
  glNormal3f(0.0, 0.0, 1.0);
  glVertex3f(0.0, 0.0, 0.4);
  glVertex3f(0.4, 1.3, 0.0);
  glVertex3f(0.3, 0.4, 0.0);
  glVertex3f(1.0, 0.9, 0.0);
  glEnd;

  glBegin(GL_POLYGON);
  glNormal3f(0.0, 0.0, 1.0);
  glVertex3f(0.0, 0.0, 0.4);
  glVertex3f(1.0, 0.9, 0.0);
  glVertex3f(0.5, 0.2, 0.0);
  glVertex3f(1.3, 0.2, 0.0);
  glEnd;

  glBegin(GL_POLYGON);
  glNormal3f(0.0, 0.0, 1.0);
  glVertex3f(0.0, 0.0, 0.4);
  glVertex3f(1.3, 0.2, 0.0);
  glVertex3f(0.5, -0.1, 0.0);
  glVertex3f(1.2, -0.6, 0.0);
  glEnd;

  glBegin(GL_POLYGON);
  glNormal3f(0.0, 0.0, 1.0);
  glVertex3f(0.0, 0.0, 0.4);
  glVertex3f(1.2, -0.6, 0.0);
  glVertex3f(0.4, -0.3, 0.0);
  glVertex3f(0.7, -1.1, 0.0);
  glEnd;

  glBegin(GL_POLYGON);
  glNormal3f(0.0, 0.0, 1.0);
  glVertex3f(0.0, 0.0, 0.4);
  glVertex3f(0.7, -1.1, 0.0);
  glVertex3f(0.1, -0.5, 0.0);
  glVertex3f(0.0, -1.3, 0.0);
  glEnd;

  glBegin(GL_POLYGON);
  glNormal3f(0.0, 0.0, 1.0);
  glVertex3f(0.0, 0.0, 0.4);
  glVertex3f(0.0, -1.3, 0.0);
  glVertex3f(-0.1, -0.5, 0.0);
  glVertex3f(-0.7, -1.1, 0.0);
  glEnd;

  glBegin(GL_POLYGON);
  glNormal3f(0.0, 0.0, 1.0);
  glVertex3f(0.0, 0.0, 0.4);
  glVertex3f(-0.7, -1.1, 0.0);
  glVertex3f(-0.4, -0.3, 0.0);
  glVertex3f(-1.2, -0.6, 0.0);
  glEnd;

  glBegin(GL_POLYGON);
  glNormal3f(0.0, 0.0, 1.0);
  glVertex3f(0.0, 0.0, 0.4);
  glVertex3f(-1.2, -0.6, 0.0);
  glVertex3f(-0.5, -0.1, 0.0);
  glVertex3f(-1.3, 0.2, 0.0);
  glEnd;

  glBegin(GL_POLYGON);
  glNormal3f(0.0, 0.0, 1.0);
  glVertex3f(0.0, 0.0, 0.4);
  glVertex3f(-1.3, 0.2, 0.0);
  glVertex3f(-0.5, 0.2, 0.0);
  glVertex3f(-1.0, 0.9, 0.0);
  glEnd;

  glBegin(GL_POLYGON);
  glNormal3f(0.0, 0.0, 1.0);
  glVertex3f(0.0, 0.0, 0.4);
  glVertex3f(-1.0, 0.9, 0.0);
  glVertex3f(-0.3, 0.4, 0.0);
  glVertex3f(-0.4, 1.3, 0.0);
  glEnd;

  glBegin(GL_POLYGON);
  glNormal3f(0.0, 0.0, 1.0);
  glVertex3f(0.0, 0.0, 0.4);
  glVertex3f(-0.4, 1.3, 0.0);
  glVertex3f(0.0, 0.5, 0.0);
  glVertex3f(0.4, 1.3, 0.0);
  glEnd;

  glBegin(GL_POLYGON);
  glNormal3f(0.0, 0.0, -1.0);
  glVertex3f(0.0, 0.0, -0.4);
  glVertex3f(0.4, 1.3, 0.0);
  glVertex3f(0.3, 0.4, 0.0);
  glVertex3f(1.0, 0.9, 0.0);
  glEnd;

  glBegin(GL_POLYGON);
  glNormal3f(0.0, 0.0, -1.0);
  glVertex3f(0.0, 0.0, -0.4);
  glVertex3f(1.0, 0.9, 0.0);
  glVertex3f(0.5, 0.2, 0.0);
  glVertex3f(1.3, 0.2, 0.0);
  glEnd;

  glBegin(GL_POLYGON);
  glNormal3f(0.0, 0.0, -1.0);
  glVertex3f(0.0, 0.0, -0.4);
  glVertex3f(1.3, 0.2, 0.0);
  glVertex3f(0.5, -0.1, 0.0);
  glVertex3f(1.2, -0.6, 0.0);
  glEnd;

  glBegin(GL_POLYGON);
  glNormal3f(0.0, 0.0, -1.0);
  glVertex3f(0.0, 0.0, -0.4);
  glVertex3f(1.2, -0.6, 0.0);
  glVertex3f(0.4, -0.3, 0.0);
  glVertex3f(0.7, -1.1, 0.0);
  glEnd;

  glBegin(GL_POLYGON);
  glNormal3f(0.0, 0.0, -1.0);
  glVertex3f(0.0, 0.0, -0.4);
  glVertex3f(0.7, -1.1, 0.0);
  glVertex3f(0.1, -0.5, 0.0);
  glVertex3f(0.0, -1.3, 0.0);
  glEnd;

  glBegin(GL_POLYGON);
  glNormal3f(0.0, 0.0, -1.0);
  glVertex3f(0.0, 0.0, -0.4);
  glVertex3f(0.0, -1.3, 0.0);
  glVertex3f(-0.1, -0.5, 0.0);
  glVertex3f(-0.7, -1.1, 0.0);
  glEnd;

  glBegin(GL_POLYGON);
  glNormal3f(0.0, 0.0, -1.0);
  glVertex3f(0.0, 0.0, -0.4);
  glVertex3f(-0.7, -1.1, 0.0);
  glVertex3f(-0.4, -0.3, 0.0);
  glVertex3f(-1.2, -0.6, 0.0);
  glEnd;

   glBegin(GL_POLYGON);
  glNormal3f(0.0, 0.0, -1.0);
  glVertex3f(0.0, 0.0, -0.4);
  glVertex3f(-1.2, -0.6, 0.0);
  glVertex3f(-0.5, -0.1, 0.0);
  glVertex3f(-1.3, 0.2, 0.0);
  glEnd;

  glBegin(GL_POLYGON);
  glNormal3f(0.0, 0.0, -1.0);
  glVertex3f(0.0, 0.0, -0.4);
  glVertex3f(-1.3, 0.2, 0.0);
  glVertex3f(-0.5, 0.2, 0.0);
  glVertex3f(-1.0, 0.9, 0.0);
  glEnd;

  glBegin(GL_POLYGON);
  glNormal3f(0.0, 0.0, -1.0);
  glVertex3f(0.0, 0.0, -0.4);
  glVertex3f(-1.0, 0.9, 0.0);
  glVertex3f(-0.3, 0.4, 0.0);
  glVertex3f(-0.4, 1.3, 0.0);
  glEnd;

  glBegin(GL_POLYGON);
  glNormal3f(0.0, 0.0, -1.0);
  glVertex3f(0.0, 0.0, -0.4);
  glVertex3f(-0.4, 1.3, 0.0);
  glVertex3f(0.0, 0.5, 0.0);
  glVertex3f(0.4, 1.3, 0.0);
  glEnd;
  SwapBuffers(DC);
Помогите сделать так же 21-конечную! Очень нада

Последний раз редактировалось Stilet; 04.11.2010 в 13:18.
Angel_of_Death вне форума Ответить с цитированием
Старый 04.11.2010, 14:56   #2
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Я не знаю что это за язык, но могу скинуть исходник на паскале рисующий звезу, с нужным числом углов, там не сложно думаю переведёте
Код:
PROGRAM star;
   uses crt,graph;
   var gD, gM, i, x0, y0, p, l, s, w:integer;
        r1, r2, a1, a2, a3:real;
        procedure ygol;
           var x1,x2,x3,y1,y2,y3:real;
              begin
                 x1:=x0+r1*cos(a1);  y1:=y0-r1*sin(a1);
                 x2:=x0+r2*cos(a2);  y2:=y0-r2*sin(a2);
                 x3:=x0+r2*cos(a3);  y3:=y0-r2*sin(a3);
                 line(round(x1),round(y1),round(x2),round(y2)); {собстевенно рисуются линии звезды,    координаты округляются round-ом}
                 line(round(x1),round(y1),round(x3),round(y3));
              end;
        procedure zv;
           begin
              for i:=1 to p do      
                 begin
                    a1:=a1+2*pi/p;
                    a2:=a1+pi/p;
                    a3:=a1-pi/p;
                    ygol; {readkey;}
                 end;
                 setfillstyle(1,5);        {в этих двух строчках заполняем звезду цветом}
                 floodfill(x0,y0,5);
           end;
BEGIN
   gD:=detect;
   initgraph(gD,gM,'c:\tp\bgi');
   setbkcolor(15);  setcolor(5);
   x0:=310;  y0:=240;
   r1:=180;  r2:=50;
   a1:=0;  p:=21;
   zv;
   readkey;
   closegraph;
END.
Программа писана не мною, но думаю человек писавший её против не будет
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.

Последний раз редактировалось Niro; 04.11.2010 в 14:58.
Niro вне форума Ответить с цитированием
Старый 04.11.2010, 15:29   #3
Angel_of_Death
Пользователь
 
Аватар для Angel_of_Death
 
Регистрация: 11.10.2010
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Niro Посмотреть сообщение
Я не знаю что это за язык, но могу скинуть исходник на паскале рисующий звезу, с нужным числом углов, там не сложно думаю переведёте
оу, прошу прощения это делфа!
Angel_of_Death вне форума Ответить с цитированием
Старый 04.11.2010, 15:39   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
не знаю что это за язык
Это функции OpenGL всего лишь... Хотя конечно язык по приведенному коду сложно понять. Думаю это Си.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.11.2010, 15:41   #5
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Ну это в принципе не дельфи, это OpenGL - как сказал мне яндекс. Но если использовать его не обязятельно, то рисуйте на канве линиями да всё, переделав прогу которую я дал выше, по сути заменив команды рисования линии на дельфийские, хотя наверное можно и нa OpenGL
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.
Niro вне форума Ответить с цитированием
Старый 05.11.2010, 01:22   #6
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
Лампочка

Цитата:
Но если использовать его не обязятельно, то рисуйте на канве линиями да всё
ТС дал "пример 11 конечной звезды" - он объёмный... И как я понял нужно то же самое, только с 21 лучами...
Цитата:
Хотя конечно язык по приведенному коду сложно понять. Думаю это Си.
Тут использованы такие функции, что может быть и Делфи и Си...))
Цитата:
Я не шарю с координатами, вот пример 11 конечной звезды
А я-то думал что я один так жестоко загоняюсь с координатами...
Хотя до меня Вам таки-далеко...

Если это какое-то задание, то думаю от Вас хотят рассчёт координат в цикле...
Что-то типа такого:
Код:
Uses ... , Math, dglOpenGL, Textures;

...

Var Form1: TForm1; DC, RC: HDC; TestTexture, NewTexture: GLuint; Zoom, angX, angY, angZ: Real;

...

Procedure TForm1.FormCreate(Sender: TObject);
Begin
      /////
Label1.Left:=5;
Label1.Top:=5;
CheckBox1.Width:=80;
CheckBox2.Width:=80;
CheckBox3.Width:=80;
CheckBox4.Width:=80;
CheckBox1.Top:=8;
CheckBox2.Top:=8;
CheckBox3.Top:=8;
CheckBox4.Top:=8;
CheckBox1.Checked:=False;
CheckBox2.Checked:=True;
CheckBox3.Checked:=True;
CheckBox4.Checked:=True;
CheckBox1.Left:=70;
CheckBox2.Left:=155;
CheckBox3.Left:=240;
CheckBox4.Left:=325;
SpinEdit1.Width:=80;
SpinEdit2.Width:=80;
SpinEdit3.Width:=80;
SpinEdit1.Top:=30;
SpinEdit2.Top:=30;
SpinEdit3.Top:=30;
SpinEdit1.Left:=70;
SpinEdit2.Left:=155;
SpinEdit3.Left:=240;
SpinEdit1.Value:=20;
SpinEdit2.Value:=70;
SpinEdit3.Value:=21;
Timer1.Interval:=1;
      /////
Zoom:=0.8;
angX:=0;
angY:=0;
angZ:=0;
Form1.DoubleBuffered:=True;
DC:=GetDC(Form1.Panel1.Handle);
RC:=CreateRenderingContext(DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
ActivateRenderingContext(DC, RC);
glClearColor(0, 0, 0, 0);
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
LoadTexture('C:\texture.tga', TestTexture, False);
End;

Procedure TForm1.FormShow(Sender: TObject);
Begin
Form1.AutoScroll:=False;
ClientWidth:=540;
ClientHeight:=500;
Panel1.Left:=5;
Panel1.Top:=60;
Panel1.Width:=530;
Panel1.Height:=435;
Panel1.Anchors:=[akLeft, akTop, akRight, akBottom];
End;

Procedure TForm1.Timer1Timer(Sender: TObject);
Var Ang: Real; T: BooLean;
Begin
If CheckBox1.Checked Then
      If angX<360 Then
            angX:=angX+1
      Else
            angX:=0;
If CheckBox2.Checked Then
      If angY<360 Then
            angY:=angY+1
      Else
            angY:=0;
If CheckBox3.Checked Then
      If angZ<360 Then
            angZ:=angZ+1
      Else
            angZ:=0;
Label1.Caption:='angX = '+FloatToStr(angX)+#13+'angY = '+FloatToStr(angY)+#13+'angZ = '+FloatToStr(angZ)+#13+'zoom = '+FloatToStr(Zoom);
If SpinEdit3.Value<2 Then
      Exit;
glClear(GL_COLOR_BUFFER_BIT Or GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glRotatef(angX, 1, 0, 0);
glRotatef(angY, 0, 1, 0);
glRotatef(angZ, 0, 0, 1);
If CheckBox4.Checked Then
      glScalef(Zoom, Zoom, Zoom);
Ang:=0;
glBegin(GL_TRIANGLE_FAN);
glTexCoord2f(0, 0);
T:=False;
glVertex3f(0.0, 0.0, SpinEdit1.Value/100);
While Ang<(360-180/SpinEdit3.Value) Do
      Begin
      glTexCoord2f(1, 1);
      glVertex3f(Cos(Ang/180*Pi), Sin(Ang/180*Pi), 0.0);
      Ang:=Ang+180/SpinEdit3.Value;
      If T Then
            glTexCoord2f(1, 0)
      Else
            glTexCoord2f(0, 1);
      T:=Not T;
      glVertex3f(SpinEdit2.Value/100*Cos(Ang/180*Pi), SpinEdit2.Value/100*Sin(Ang/180*Pi), 0.0);
      Ang:=Ang+180/SpinEdit3.Value;
      End;
glTexCoord2f(1, 1);
glVertex3f(1.0, 0.0, 0.0);
glEnd;
Ang:=0;
glBegin(GL_TRIANGLE_FAN);
glTexCoord2f(0, 0);
T:=False;
glVertex3f(0.0, 0.0, -SpinEdit1.Value/100);
While Ang<(360-180/SpinEdit3.Value) Do
      Begin
      glTexCoord2f(1, 1);
      glVertex3f(Cos(Ang/180*Pi), Sin(Ang/180*Pi), 0.0);
      Ang:=Ang+180/SpinEdit3.Value;
      If T Then
            glTexCoord2f(1, 0)
      Else
            glTexCoord2f(0, 1);
      T:=Not T;
      glVertex3f(SpinEdit2.Value/100*Cos(Ang/180*Pi), SpinEdit2.Value/100*Sin(Ang/180*Pi), 0.0);
      Ang:=Ang+180/SpinEdit3.Value;
      End;
glTexCoord2f(1, 1);
glVertex3f(1.0, 0.0, 0.0);
glEnd;
SwapBuffers(DC);
End;

Procedure TForm1.FormResize(Sender: TObject);
Var m: Integer;
Begin
m:=Min(Panel1.Width, Panel1.Height);
glPushMatrix;
glViewport((Panel1.Width-m) Div 2, (Panel1.Height-m) Div 2, m, m);
glPopMatrix;
End;

Procedure TForm1.FormDestroy(Sender: TObject);
Begin
glDisable(GL_TEXTURE_2D);
glDisable(GL_DEPTH_TEST);
End;
Вот такой кошмар я соорудил... Буду рад если кто-то нормально разбирающийся в OGL его раскритикует...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 05.11.2010, 11:56   #7
Angel_of_Death
Пользователь
 
Аватар для Angel_of_Death
 
Регистрация: 11.10.2010
Сообщений: 10
По умолчанию

на самом деле нужно что бы эта звезда вращалась с заданой скоростью!
Angel_of_Death вне форума Ответить с цитированием
Старый 05.11.2010, 18:40   #8
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Цитата:
на самом деле нужно что бы эта звезда вращалась с заданой скоростью!
Ну а у меня как? =\\
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
графика Delphi(звезда Давида) Yuko Помощь студентам 2 15.05.2010 12:18
[Pascal] крутящаяся звезда Рамик Помощь студентам 2 27.05.2009 17:08
Дата Конечная (ДД.ММ.ГГГГ) - Дата Начальная (ДД.ММ.ГГГГ) = Количество Месяцев stanislav24 Microsoft Office Excel 5 20.12.2008 10:36