|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.01.2007, 13:42 | #1 |
Пользователь
Регистрация: 13.12.2006
Сообщений: 13
|
Помогите с canvas (оч. срочно)
Завтра последний день здачи курсовика, надеюсь на вашу помощ.
Имеется Повернутый эллипс: for f:=0 to 2*314 do begin x:=70*cos(f/100); y:=30*sin(f/100); r:=sqrt(x*x+y*y); Poly[f].X:=round(x*cos(0.5)+y*sin(0.5))+Cl ientWidth div 2; Poly[f].Y:=-round(x*sin(0.5)-y*cos(0.5))+ClientHeight div 2; end; Canvas.Polygon(Poly) end; Нужно нарисовать звезду, который движется по этому эллипсу. Проблема в том, что описавать траектория по обычному эллипсу я умею, а вот что делать с повернутым... Надеюсь на вашу помощ, уважаемые программисты. |
12.01.2007, 14:22 | #2 |
Владимир М.
Участник клуба
Регистрация: 30.10.2006
Сообщений: 1,289
|
смотри :
в примере получены координаты X, Y затем повернуты : > round(x*cos(0.5)+y*sin(0.5)) > round(x*sin(0.5)-y*cos(0.5)) именно этот код (попробуй заменить 0,5) [это чистое применение матицы поворота] к тому же, траектория центра звезды уже просчитана (хотя и не оптимально) что еще нужно ?
Берегите друг друга!
Последний раз редактировалось zetrix; 12.01.2007 в 16:50. Причина: объединение 2-х последовательных сообщений |
12.01.2007, 16:02 | #3 |
Пользователь
Регистрация: 13.12.2006
Сообщений: 13
|
куда не вставлю вашу процедурку, не работает(((
вот основная часть кода, покажите плиз где надо исправить, а то сам никак((( var a,a0,b,b0:array of tpoint; k,cx1,cx2,cy1,cy2,r1,r2,xc,yc,x0,y0 ,kx,dx,dy:integer; fi,firad,firad1,firad2,turn:real; procedure TForm1.FormCreate(Sender: TObject); var i:integer; begin xc:=form1.clientwidth div 2; yc:=form1.clientheight div 2; x0:=form1.clientwidth div 2; y0:=form1.clientheight div 2; r1:=245; r2:=150; kx:=xc; cx1:=xc-r1; cx2:=xc+r1; cy1:=yc-r2; cy2:=yc+r2; setlength(a,8) ; a[0].x:=x0; a[0].y:=y0-20; a[1].x:=x0+5; a[1].y:=y0-5; a[2].x:=x0+20; a[2].y:=y0; a[3].x:=x0+5; a[3].y:=y0+5; a[4].x:=x0; a[4].y:=y0+20; a[5].x:=x0-5; a[5].y:=y0+5; a[6].x:=x0-20; a[6].y:=y0; a[7].X:=x0-5; a[7].Y:=y0-5; setlength(a0,8) ; for i:=0 to 8 do a0[i]:=a[i]; setlength(b,8); b[0].x:=x0; b[0].y:=y0-20; b[1].x:=x0+5; b[1].y:=y0-5; b[2].x:=x0+20; b[2].y:=y0; b[3].x:=x0+5; b[3].y:=y0+5; b[4].x:=x0; b[4].y:=y0+20; b[5].x:=x0-5; b[5].y:=y0+5; b[6].x:=x0-20; b[6].y:=y0; b[7].X:=x0-5; b[7].Y:=y0-5; setlength(b0,8) ; for i:=0 to 8 do b0[i]:=b[i]; end; procedure traektor; var r: real; f: integer; x, y: real; Poly: array[0..2*314] of TPoint; begin form1.Canvas.Brush.Color:=clWhite; for f:=0 to 2*314 do begin x:=250*cos(f/100); y:=150*sin(f/100); r:=sqrt(x*x+y*y); Poly[f].X:=round(x*cos(0.5)+y*sin(0.5))+fo rm1.ClientWidth div 2; Poly[f].Y:=-round(x*sin(0.5)-y*cos(0.5))+form1.ClientHeight div 2; end; form1.Canvas.Polygon(Poly) end; procedure Zvezda; var i:integer; begin with form1.Canvas do begin pen.Color:=clblack; brush.Color:=clblack; for i:=0 to 7 do polygon (a); end;end; procedure st; var i:integer; begin with form1.Canvas do begin pen.Color:=clblack; brush.Color:=clblack; for i:=0 to 7 do polygon (b); end;end; procedure stir; begin with form1.canvas do begin brush.color:=form1.color; fillrect(rect(0,0,form1.clientwidth ,form1.clientheight)); end; end; procedure dvig ; var i:integer; begin fi:=k*2*pi/180; dx:=round(xc-94-r1*cos(fi)); dy:=round(r2*sin(fi)); for i:=0 to 7 do begin a[i].x:=dx+xc-r1+round((a0[i].x-x0)*cos(fi)+(a0[i].y-y0)*sin(fi)); a[i].y:=dy+y0+round((a0[i].x-x0)*sin(fi)-(a0[i].y-y0)*cos(fi)); end; end; procedure move; var i:integer; begin k:=k+1; stir; traektor; Zvezda; dvig; end; ОООООчень надеюсь на помош |
12.01.2007, 16:33 | #4 |
Владимир М.
Участник клуба
Регистрация: 30.10.2006
Сообщений: 1,289
|
процедуру Dvig; убери
все ПРОИСХОДИТ тут : Код:
заполнение/инициализация вызывается в Form1.Create(); один раз : > k:= 0; > traektor; массивы a0 и b0 не нужны.
Берегите друг друга!
|
12.01.2007, 19:31 | #5 |
Пользователь
Регистрация: 13.12.2006
Сообщений: 13
|
Все вставил все отлично тока выдает системную ошибку, видимо что то не так сделал(опыта мало),
Вот моя программа,оставь все как есть только сделай чтобы крутящаяся звезда вращалась по заданому эллипсу. помоги плиз . Последний раз редактировалось khaz; 12.01.2007 в 19:40. |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопрос с canvas | Манжосов Денис :) | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 7 | 09.03.2009 23:09 |
Подключение Canvas | Zeraim | Общие вопросы Delphi | 4 | 13.05.2008 20:51 |
Как очистить Canvas? | Pro_BerSerK | Общие вопросы Delphi | 9 | 30.01.2008 16:03 |
Canvas.Polygon | Sibedir | Общие вопросы Delphi | 2 | 18.01.2008 14:36 |
Canvas | Zven | Общие вопросы Delphi | 9 | 06.12.2007 10:40 |