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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2014, 23:49   #1
nelo_001
Пользователь
 
Регистрация: 14.01.2013
Сообщений: 58
По умолчанию Nes Old Движение эллпса

В связи с неактуальностью прошлой темы , вынужден создать новую .
Помогите плз
--------------
Задачи в прошлой теме:
Нарисовать параболу от 1 имеджа до 2 ( готово )
Нарисовать эллипс в начале 1-го из имеджей ( готово )

Реализовать движение по параболе ( 0% ) ;
--------------------------------------------------------

В данной ситуации эллипс нарисован в начале координат правого треугольника .
//Пробовал через таймер ( тут он 100% ) шарик , просто исчезал
Частички кода :

Код:
procedure TForm1.PaintEL(x, y: Integer);
var w,h: Integer;
begin
  w :=10 ;
  h :=10 ;
  Canvas.Ellipse(x,y,x+w,y+h);
end;
Код:
procedure Tform1.procABC(x1,x2,x3,y1,y2,y3:integer;var a,b,c:Real);
begin
 a:=( y3-(x3*(y2-y1)+x2*y1-x1*y2)/(x2-x1) )/(x3*(x3-x1-x2)+x1*x2 );
label7.caption:='a = '+floattostr((a));
  b:=(y2-y1)/(x2-x1)-a*(x1+x2);
label8.caption:='b = '+floattostr((b));
 c:=(x2*y1-x1*y2)/(x2-x1)+a*x1*x2;
label9.caption:='c = '+floattostr((c));
end;
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
a,b,c:Real;
x,y,r,x1,x2,x3,y1,y2,y3,i,Ypar:Integer;
begin
randomize;
r:=random(50)+1;
x1:=image2.left+32;
y1:=image2.Top+r;
x2:=image3.left+32;
y2:=image3.Top+r;
x3:=image1.left+32;
y3:=image1.Top;


label1.Caption:='Top:= '+inttostr(x1);
label2.Caption:='Left:= '+inttostr(y1);
label3.Caption:='Top:= '+inttostr(x2);
label4.Caption:='Left:= '+inttostr(y2);
label5.Caption:='Top:= '+inttostr(x3);
label6.Caption:='Left:= '+inttostr(y3);


procABC(x1,x2,x3,y1,y2,y3,a,b,c);
 for i:=x1 to x3 do Canvas.Pixels[i,Round(a*i*i+b*i+c)]:=clRed;
DrawEclipse(x3,y3);

end;
Снимок.jpg
nelo_001 вне форума Ответить с цитированием
Старый 14.09.2014, 00:42   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Вот, все движется. Только скорость - не по законам физики, а просто равномерная.
Код:
var
  Form1: TForm1;
  a,b,c:Real;   // обязательно глобальные
  x,x3:Integer; // --- '' --- 
implementation

{$R *.dfm}
procedure procABC(x1,x2,x3,y1,y2,y3:integer;var a,b,c:Real);
begin
 a:=( y3-(x3*(y2-y1)+x2*y1-x1*y2)/(x2-x1) )/(x3*(x3-x1-x2)+x1*x2 );
 b:=(y2-y1)/(x2-x1)-a*(x1+x2);
 c:=(x2*y1-x1*y2)/(x2-x1)+a*x1*x2;
end;

procedure TForm1.Button1Click(Sender: TObject);
var x1,x2,y1,y2,y3:Integer;
begin
 x1:=56;  x2:=392;  x3:=632;  y1:=392;  y2:=192;  y3:=438;
 procABC(x1,x2,x3,y1,y2,y3,a,b,c);
 Timer1.Enabled:=True;
 x:=x1;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var y:Integer;
begin
 if x>x3 then Exit;
 Canvas.Brush.Color:=Color;         // очистка - удаление предыдущего положение шарика
 Canvas.FillRect(Canvas.ClipRect);  // --- '' ---
 y:=Round(a*x*x+b*x+c);
 Canvas.Ellipse(x-5,y-5,x+5,y+5);
 x:=x+10;
end;
end.
В свойствах таймера установить Timer1.Enabled False,
Interval - например 100
type_Oleg вне форума Ответить с цитированием
Старый 14.09.2014, 13:38   #3
nelo_001
Пользователь
 
Регистрация: 14.01.2013
Сообщений: 58
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Вот, все движется. Только скорость - не по законам физики, а просто равномерная.
Стирает все полностью , шарик летает по пустой форме. ( Параболу вернул , но имеджи и лейболы стираются )
Посмотрите Project 2.rar
Вам в лс я скину пароль

Последний раз редактировалось nelo_001; 14.09.2014 в 14:10.
nelo_001 вне форума Ответить с цитированием
Старый 14.09.2014, 16:49   #4
nelo_001
Пользователь
 
Регистрация: 14.01.2013
Сообщений: 58
По умолчанию

Очень печально . Я нашел ошибку . Я забыл сказать , что основная сторона это правая , парабола должна рисоваться от x1 до x3 с право на лева и шарик точно также должен лететь
-----------------------------------
я заново сделал программу имеджи и иксы под своими номерами . Заметил , что
Код:
 for i:=x3 to x1 do Canvas.Pixels[i,Round(a*i*i+b*i+c)]:=clRed;
Конечно рисует параболу с лева на право
Цитата:
for i:=x1 to x3 do Canvas.Pixels[i,Round(a*i*i+b*i+c)]:=clRed;
не может нарисовать , переведу в числа ..
for i:=680 to 80 do Canvas.Pixels[i,Round(a*i*i+b*i+c)]:=clRed;
Вот она проблема ... Как нарисовать в обратном порядке от большего к меньшему ?
___________________________________ _____
Или может , можно другим путем отправить эллипс справа налево ?

Последний раз редактировалось nelo_001; 14.09.2014 в 17:12.
nelo_001 вне форума Ответить с цитированием
Старый 14.09.2014, 21:34   #5
nelo_001
Пользователь
 
Регистрация: 14.01.2013
Сообщений: 58
По умолчанию

Как бы я не старался , как бы не менял формулу параболы и эллипса , ничего кроме полета эллипса в космос не получается
При последнем испытании эллипс отправился в ад .
Ответьте кто ни будь , как отправить эллипс из (х1)616 в (х3)64 ?
Справа налево ←
Снимок.jpg
nelo_001 вне форума Ответить с цитированием
Старый 14.09.2014, 22:42   #6
Foreseen
Техножрец
Форумчанин
 
Аватар для Foreseen
 
Регистрация: 04.07.2014
Сообщений: 289
По умолчанию

Вы что то перемудрили в формулах)
Все, что вам нужно - затереть предыдущее положение шарика и восстановить тот кусочек параболы, который был им затерт.
— Двери есть везде. Просто нужно знать, как в них войти.
Foreseen вне форума Ответить с цитированием
Старый 14.09.2014, 23:24   #7
nelo_001
Пользователь
 
Регистрация: 14.01.2013
Сообщений: 58
По умолчанию

Цитата:
Сообщение от Foreseen Посмотреть сообщение
Вы что то перемудрили в формулах)
Все, что вам нужно - затереть предыдущее положение шарика и восстановить тот кусочек параболы, который был им затерт.
Вы наверное не так поняли , если я затру положение шарика , то все имеджи , лейболы , и тд сотрутся .Шарик двигается с левой точки в правую , мне необходимо сделать наоборот , чтобы двигался с правой в левую .
Вот картинка как он двигается
Снимок.jpg
nelo_001 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Движение со скоростью света и быстрее скорости света - Сверхсветовое движение Alar Свободное общение 354 13.11.2011 21:32
Движение колец и Движение линий сверху Iren1993 Помощь студентам 2 07.11.2011 19:48
формат NES qpen1x Софт 4 13.06.2010 15:46
Формат NES! qpen1x Свободное общение 9 12.06.2010 23:16
NES ресурсы [Smarik] Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 19.09.2008 23:21