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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2007, 13:42   #1
khaz
Пользователь
 
Регистрация: 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;

Нужно нарисовать звезду, который движется по этому эллипсу.
Проблема в том, что описавать траектория по обычному эллипсу я умею, а вот что делать с повернутым...
Надеюсь на вашу помощ, уважаемые программисты.
khaz вне форума Ответить с цитированием
Старый 12.01.2007, 14:22   #2
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 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-х последовательных сообщений
Virtson вне форума Ответить с цитированием
Старый 12.01.2007, 16:02   #3
khaz
Пользователь
 
Регистрация: 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;



ОООООчень надеюсь на помош
khaz вне форума Ответить с цитированием
Старый 12.01.2007, 16:33   #4
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
Счастье

процедуру Dvig; убери

все ПРОИСХОДИТ тут :
Код:
procedure move;
var i:integer;
begin
  k:= (k+2);
  if k>= 2*314 then k:= 2*314;
  stir;
  form1.Canvas.Polygon(Poly);
  Zvezda(Poly[k].X, Poly[k].Y);
end;
Poly cделан глобальной переменной.
заполнение/инициализация вызывается в Form1.Create();
один раз :
> k:= 0;
> traektor;

массивы a0 и b0 не нужны.
Вложения
Тип файла: rar poly.rar (5.0 Кб, 12 просмотров)
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Старый 12.01.2007, 19:31   #5
khaz
Пользователь
 
Регистрация: 13.12.2006
Сообщений: 13
По умолчанию

Все вставил все отлично тока выдает системную ошибку, видимо что то не так сделал(опыта мало),
Вот моя программа,оставь все как есть только сделай чтобы крутящаяся звезда вращалась по заданому эллипсу. помоги плиз .
Вложения
Тип файла: rar ellipce.rar (14.1 Кб, 11 просмотров)

Последний раз редактировалось khaz; 12.01.2007 в 19:40.
khaz вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос с 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