Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 26
1

Движение шара по прямой, заданной линейной функцией

14.04.2016, 22:24. Показов 585. Ответов 2
Метки нет (Все метки)

необходимо написать кусочек программы
процедуру
для движения шара по прямой вида y=k*x +b


т.е сначала шар движется по прямой к вершине ,начиная с основания. потом от вершины вниз. заканчивает тоже у основания
движется не просто по прямой вида y=x, а учитывается коэффициент наклона


вообщем надо модифицировать процедуру шарики

при том, что когда пишу e:= new CircleABC(x,y-x,20,clred); он движется, если же усложняю функцию, то нет

помогите пожалуйста

Pascal
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
uses ABCObjects, GraphABC, Timers;
const M_PI=3.1415926535897932384626433832795;
var h1,h2: real;
a,b,c,d,f,s:real;
h:integer;
p,x1,y1,a1,k1:integer;
x,y:integer;
e: EllipseABC; 
T : Timer; 
Di : Byte; 
Visible : Boolean; 
 
procedure linii;
var k:integer;
begin
k:=30;
SetWindowSize(1000,600);// задаем размеры окна
CenterWindow;// окно по центру
x1:=150;y1:=500;
line(x1,y1,x1+(k*p),y1-(k*h));// риусем сторону
line(x1+(k*p),y1-(k*h),x1+a1*k ,y1);// риусем сторону
line(x1+a1*k,y1,x1,y1);// риусем сторону
end;
procedure shariki;// движение шарика
var x2,y2:integer; 
//k1:integer;
begin 
if Visible then 
e.Destroy; 
Visible := True; 
y2:= -500; 
x2:=1450;
//k1:=20;
{if  (x< 300) and (y> 40) then
begin
x := x + Di;
e:= new CircleABC(x,round((h/p)*(x-x2)+y2),20,clred); // перерисовка круга красного цвета
 
end
else  } 
begin 
y:=-500;
if x <=1800 then
begin
x := x + Di;
e:= new CircleABC(x,x*k1,20,clyellow);// перерисовка круга желтого цвета
end ;
end;
end;
 
function first(var  a, b, c : real) : real;
var y2,arcy,x2,s2: real;
begin
y2:=(power(b,2)+power(c,2)-power(a,2))/(2*b*c); 
//arcy:=acos(y);
arcy:=arctan(sqrt(1-sqr(y2))/y2);
x2:=M_PI-arcy;
s2:=x2+b+c;
first:=s2;
end;
 
function second(var a,b,d: real) : real;
var s: real;
begin
s:= c+b-(2*d);
second:=s;
end;
 
begin
// writeln('vvedite 4 parametra');
//readln(a,b,c,d);
a:=15;
b:=12;
c:=9;
d:=1;
p:= round((sqr(b)-sqr(c)+sqr(a))/(2*a));
h1:=sqr(b)-sqr(p);
h:=round(sqrt(h1));
a1:=round(a);
k1:=round(h/p);
f:=first(a,b,c);
writeln('rez1=',f);
s:=second(a,b,d);
writeln('rez1=',s);
linii;
    //s:=second(a,b,d);
//  writeln('rez1=',f);
//  writeln('rez1=',s);
x:= 500; // задаем начальную координату по оси ox 
Di := 2;  // задаем шаг движения
Visible := False; 
T := New Timer(30, shariki); // вызов процедуры рисования шариков
T.Start; 
end.
0
Миниатюры
Движение шара по прямой, заданной линейной функцией  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.04.2016, 22:24
Ответы с готовыми решениями:

Движение шарика вдоль 1 прямой со стрелкой. Стрелка меняет свое направление в зависимости от направления скорости шара
namespace pr1DParticle { public partial class f1DParticle : Form { public...

Апроксимаци линейной функцией
Есть 10 значений х и y, нужно найти сумму х, y, x^2, x*y... Такое задание в Екселе я сделал, теперь...

Движение шара по форме
Здравствуйте! Нужна помощь, надо чтобы шарик двигался по плоскости с тем углом, который вводится...

Движение бильярдного шара
Как мне изменить данную программу чтоб скорость и направление движения задавались пользователем...

2
2508 / 1129 / 582
Регистрация: 07.06.2014
Сообщений: 3,281
15.04.2016, 00:21 2
ну ты и наворотила. мульёны каких-то хитрых вычислений, куча непонятных переменных...
извини, если я не понял твой алгоритм.

движение вроде так получается:
Pascal
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
uses
  ABCObjects, GraphABC, Timers;
 
const
  M_PI = 3.1415926535897932384626433832795;
 
// Глобальные переменные
var
  x, y, k1: integer;
  e: EllipseABC; 
  h1, h2: real;
  a, b, c, d, f, s: real;
  h: integer;
  p, x1, y1, x2, y2, x3, a1, k: integer;
  Di: Byte; 
  Visible: Boolean;
  koef, bkoef, koef2, bkoef2: real;
 
 
procedure linii;
begin
  SetWindowSize(1000, 600);// задаем размеры окна
  CenterWindow;// окно по центру
  line(x1, y1, x2, y2);// рисуем сторону
  line(x2, y2, x3, y1);// рисуем сторону
  line(x3, y1, x1, y1);// рисуем сторону
end;
 
procedure shariki;// движение шарика
begin
  if Visible then 
    e.Destroy; 
  Visible := True; 
  if x <= x2 then
  begin
    x := x + Di;
    y := round(koef * x + bkoef) - 25;
    e := new CircleABC(x, y, 20, clyellow);// перерисовка круга желтого цвета
  end
  else
  if x <= x3 then
  begin
    x := x + Di;
    y := round(koef2 * x + bkoef2) - 25;
    e := new CircleABC(x, y, 20, clyellow);// перерисовка круга желтого цвета
  end;
  
end;
 
function first(var a, b, c: real): real;
var
  y2, arcy, x2, s2: real;
begin
  y2 := (power(b, 2) + power(c, 2) - power(a, 2)) / (2 * b * c); 
  //arcy:=acos(y);
  arcy := arctan(sqrt(1 - sqr(y2)) / y2);
  x2 := M_PI - arcy;
  s2 := x2 + b + c;
  first := s2;
end;
 
var
  T: Timer;
 
begin
  // writeln('vvedite 4 parametra');
  //readln(a,b,c,d);
  a := 15;
  b := 12;
  c := 9;
  d := 1;
  p := round((sqr(b) - sqr(c) + sqr(a)) / (2 * a));
  h1 := sqr(b) - sqr(p);
  h := round(sqrt(h1));
  a1 := round(a);
  k1 := round(h / p);
  f := first(a, b, c);
  writeln('rez1=', f);
  //  s := second(a, b, d);
  writeln('rez1=', s);
  x1 := 150;y1 := 500;
  k := 30;
  
  
  x2 := x1 + (k * p);
  y2 := y1 - (k * h);
  koef := (y2 - y1) / (x2 - x1); 
  bkoef := y1 - (y2 - y1) * x1 / (x2 - x1);
  
  x3 := x1 + a1 * k;
  koef2 := (y1 - y2) / (x3 - x2); 
  bkoef2 := y2 - (y1 - y2) * x2 / (x3 - x2);
  
  linii;
  
  x := x1; // задаем начальную координату по оси ox 
  y := y1;
  Di := 2;  // задаем шаг движения
  Visible := False; 
  T := new Timer(10, shariki); // вызов процедуры рисования шариков
  T.Start; 
end.
0
Модератор
63381 / 47074 / 32446
Регистрация: 18.05.2008
Сообщений: 114,107
15.04.2016, 08:59 3
Вот зачем это?
Pascal
1
const M_PI=3.1415926535897932384626433832795;
Вы думаете Паскаль не знает чему равно pi?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.04.2016, 08:59

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Движение воздушного шара
доброго времени суток прошу о помощи, нужно написать две программы на языке паскаль 1. Движение...

Движение шара (DevC++)
Помогите пожалуйста написать прогу с шаром с окном 400x400 Движение в случайном направлении. Смена...

Движение шара по форме
Создайте приложение, в котором с помощью меню можно задать направление движения шара, который...

Движение шара по диагонали
Здравствуйте. Есть программа движения шара по диагонали, но не совсем правильно движется. Не ровно...


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

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

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