0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 7
1

Как сделать крутящиеся шестеренки

17.12.2013, 20:39. Показов 1784. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вообщем, нужно нарисованные через Graph шестеренки заставить крутиться, причем крутиться по законам физики,я вообще без понятия, а нужно срочно. Прошу, пожалуйста, помогите мне это сделать. Или пришлите мне готовую работу.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.12.2013, 20:39
Ответы с готовыми решениями:

КрУтЯщИЕсЯ БукВы
Ребят, такое задание:надо написать инициалы 3D,чтобы они на одну кнопку крутились на другую...

Какое минимальное число поворотов сделать, чтобы шестеренки вернулись на исходное состояние
две сцепленные шестеренки. У одной n зубцов , у другой к.ТРебуеться найти какое минимальное число...

Найти, какое минимальное число поворотов на один зубчик требуется сделать, чтобы шестеренки вернулись в исходное состояние
Даны две сцепленные шестеренки. У одной шестеренки N зубцов, у другой – K. Требуется найти, какое...

Крутящиеся колесо
Доброго Вам времени суток! Уважаемые, очень нужна ваша помощь. Просьба такова: Нужно сделать...

10
3584 / 2194 / 692
Регистрация: 29.05.2013
Сообщений: 9,365
18.12.2013, 03:50 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
uses Graph,Crt;
 
var
  grDriver: Integer;
  grMode  : Integer;
  ErrCode : Integer;
 
procedure DrawGear(X,Y,A: Integer);
Var
  AC1,AC2: ArcCoordsType;
  i: Integer;
begin
 Circle(X, Y, 40);
 for i := 1 to 19
 do begin
    if i mod 2 <> 0
    then begin
         Arc(X, Y, A+i*20+10, A+i*20+30, 110);
         GetArcCoords(AC1);
         if i > 1
         then Line(AC1.XStart, AC1.YStart, AC2.XEnd, AC2.YEnd);
         end
    else begin
         Arc(X, Y, A+i*20+15, A+i*20+25, 140);
         GetArcCoords(AC2);
         Line(AC1.XEnd, AC1.YEnd, AC2.XStart, AC2.YStart);
         end;
    end;
end;
 
procedure AnimateGear;
Var i: Integer;
begin
 i := 0;
 repeat
  SetColor(White);
  DrawGear(200, 200, i*5);
  Delay(80);
  SetColor(Black);
  DrawGear(200, 200, i*5);
  Inc(i);
  if i > 72 then i := 0;
 until keypressed;
end;
 
 
begin
  grDriver := Detect;
  InitGraph(grDriver, grMode, '');
  ErrCode := GraphResult;
  if ErrCode = grOk
  then begin
       AnimateGear;
       CloseGraph;
       end
  else begin
       WriteLn('Ошибка инициализации графики:', GraphErrorMsg(ErrCode));
       ReadLn;
       end;
end.
1
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 7
18.12.2013, 19:13  [ТС] 3
Большое спасибо

Добавлено через 6 часов 57 минут
Мне нужно добавить рядом еще несколько шестеренок, как это сделать?
0
Заблокирован
18.12.2013, 19:15 4
Цитата Сообщение от MrXardison Посмотреть сообщение
Мне нужно добавить рядом еще несколько шестеренок, как это сделать?
по аналогии, как вам показали с одной.
0
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 7
18.12.2013, 19:17  [ТС] 5
Release я пробовал но ничего не рисует кроме той что есть
0
3584 / 2194 / 692
Регистрация: 29.05.2013
Сообщений: 9,365
18.12.2013, 20:47 6
Вот вам следующая версия. Шестеренки 2.0
Там теперь много чего можно менять.
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
103
104
uses Graph,Crt;
 
Type
 TGear = record
  X, Y: Integer;
  R: Integer;
  TC, TH: Integer;
  A: Integer;
  Color: Word;
 end;
 
Const
 GearCount = 2;
var
  grDriver: Integer;
  grMode  : Integer;
  ErrCode : Integer;
  Gears: Array[1..GearCount] of TGear;
 
procedure DrawGear(G: TGear);
Var
  AC1, AC2: ArcCoordsType;
  i: Integer;
  Rad: Integer;
begin
 Circle(G.X, G.Y, G.R shr 1);
 Rad := 360 div (G.TC shl 1);
 for i := 1 to G.TC shl 1 + 1
 do begin
    if i mod 2 <> 0
    then begin
         Arc(G.X, G.Y, i*Rad+G.A, i*Rad+G.A+Rad, G.R);
         GetArcCoords(AC1);
         if i > 1
         then Line(AC1.XStart, AC1.YStart, AC2.XEnd, AC2.YEnd);
         end
    else begin
         Arc(G.X, G.Y, i*Rad+G.A+Rad shr 2, i*Rad+G.A+Rad-Rad shr 2, G.R+G.TH);
         GetArcCoords(AC2);
         Line(AC1.XEnd, AC1.YEnd, AC2.XStart, AC2.YStart);
         end;
    end;
end;
 
procedure AnimateGear(G: TGear; Color: Integer);
begin
 SetColor(Color);
 DrawGear(G);
end;
 
procedure AnimateScene;
Var A, i: Integer;
begin
 A := 0;
 repeat
  for i := 1 to GearCount
  do AnimateGear(Gears[i], Gears[i].Color);
  Delay(40);
  for i := 1 to GearCount
  do begin
     AnimateGear(Gears[i], Black);
     if i mod 2 = 0
     then begin
          Inc(Gears[i].A);
          if Gears[i].A > 360 then Gears[i].A := 0;
          end
     else begin
          Dec(Gears[i].A);
          if Gears[i].A < 0 then Gears[i].A := 360;
          end;
     end;
 until KeyPressed;
end;
 
procedure InitScene;
begin
 Gears[1].X := 200; Gears[1].Y := 200;
 Gears[1].R := 60;
 Gears[1].TC := 6; Gears[1].TH := 30;
 Gears[1].A := 0;
 Gears[1].Color := LightRed;
 
 Gears[2].X := 364; Gears[2].Y := 200;
 Gears[2].R := 60;
 Gears[2].TC := 6; Gears[2].TH := 30;
 Gears[2].A := 50;
 Gears[2].Color := LightBlue;
end;
 
begin
  grDriver := Detect;
  InitGraph(grDriver, grMode, '');
  ErrCode := GraphResult;
  if ErrCode = grOk
  then begin
       InitScene;
       AnimateScene;
       CloseGraph;
       end
  else begin
       WriteLn('Ошибка инициализации графики:', GraphErrorMsg(ErrCode));
       ReadLn;
       end;
end.
1
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 7
18.12.2013, 21:16  [ТС] 7
Спасибо, вы меня просто спасли
0
3584 / 2194 / 692
Регистрация: 29.05.2013
Сообщений: 9,365
18.12.2013, 21:24 8
Если бы вы сами это сделали с моей первой версией, то можно было-бы так сказать. А так это скорее медвежь услуга. Сами то вы ничему не научились... и это грустно.
0
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 7
20.12.2013, 21:18  [ТС] 9
Пытливый, а как поменять скорость и направление во втором варианте?? В первом я разобрался ,а там найти не могу.
0
3584 / 2194 / 692
Регистрация: 29.05.2013
Сообщений: 9,365
20.12.2013, 23:21 10
Направление определяется четностью шестеренки, оно встроено в обработку всей сцены согласно законов механики сцепленных шестеренок. Скорость можно изменять с помощью Delay(40), но опять же это общая скорость всей сцены. Вы можете задавать начальный угол поворота шестерни через Gears[i].А. Я это делаю в InitScene.
ПС: Вы можете сюда рисунок прикрепить того что вы в итоге хотите получить. Мне будет легче понять.
0
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 7
21.12.2013, 12:11  [ТС] 11
Мне нужно создать меню для этой программы чтоб там можно было выбирать направление, скорость, и радиус шестеренок, что я сейчас и пытаюсь сделать.
0
21.12.2013, 12:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.12.2013, 12:11
Помогаю со студенческими работами здесь

Крутящиеся полоса
всем добрый день, есть такой вопрос: у меня на странице с лева есть картинки нужно сделать что бы...

Шестерёнки
Помогите, требуется программа для показания работы шестерёнок из гипоциклоиды и эпициклоиды. ...

Шестеренки
не могу понять как правильно оптимизировать для больших значений 1)Шестеренки. Даны две...

Даны две шестеренки
Даны 2 сцепленные шестеренки.У одной шестеренки N зубцов, у другой K.Требуется найти какое...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru