Форум программистов, компьютерный форум, киберфорум
Наши страницы
PascalABC.NET
Войти
Регистрация
Восстановить пароль
 
Ganter
0 / 0 / 1
Регистрация: 19.09.2017
Сообщений: 18
#1

Как сделать так, чтобы знак вращался ровно по оси, а не под углом - PascalABC.NET/GraphABC

19.09.2017, 19:52. Просмотров 180. Ответов 7
Метки нет (Все метки)

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
uses graphabc;
var
  j:real;
procedure drow(j:real);
var
  x,y,i:integer;
  r:real;
  g:real = 1.5*pi;
begin
  moveto(window.Width div 2,window.Height div 2);
  repeat
    x:= window.Width div 2 + round(cos(g+j)*r);
    y:= window.Height div 2 - round(sin(g)*r);
    lineto(x,y);
    g-=0.01;
    if (g < -pi/2+0.2) and (i = 0) then begin
                                          moveto(window.Width div 2 + round(cos(5*pi/4+j)*300),window.Height div 2 - round(sin(5*pi/4)*300));
                                          lineto(x,y);
                                          i+=1;
                                        end else if (g < -4*pi/4-0.3) and (i = 1) then begin
                                                                                         moveto(window.Width div 2 + round(cos(5*pi/4+j)*300),window.Height div 2 - round(sin(5*pi/4)*300));
                                                                                         lineto(x,y);
                                                                                         i+=1;
                                                                                       end; 
    moveto(x,y);
    r+=0.2;
  until g < -7*pi/4; 
    lineto(x + round(cos(pi/4+j)*100),y - round(sin(pi/4)*100));    
end;
 
  
BEGIN
 
pen.Color:=rgb(255,48,48);
pen.Width:=4;
 
repeat
  lockdrawing;
  clearwindow(rgb(190,190,190));
  drow(j);
  redraw;
  j+=0.01;
until false;                     
END.

http://www.cyberforum.ru/pascalabc-net/thread870493.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2017, 19:52
Я подобрал для вас темы с готовыми решениями и ответами на вопрос GraphABC Как сделать так, чтобы знак вращался ровно по оси, а не под углом (PascalABC.NET):

Сделать так, чтобы при нажатии на кнопку появлялось меню под ней
Я нарисовал кнопку, но не знаю как сделать так, чтобы при нажатии на кнопку...

Как сделать, чтобы цикл рисовал график на оси х?
что нужно исправить,чтобы цикл рисовал на оси Х, а не вверху

Как сделать так,чтобы d перевести в численный тип
const digits : set of char=; var s,d:string; i:integer; begin ...

Как сделать так, чтобы размерность массива было от 1 до N
как сделать так, чтобы размерность массива было от 0 до N(N нужно будет задать...

Как сделать так, чтобы значения выводили автоматически, а не вручную?
есть решенная задача, но нужно, чтобы элементы массива выводились...

7
Volobuev Ilya
C#
139 / 120 / 107
Регистрация: 25.07.2014
Сообщений: 2,268
Записей в блоге: 5
20.09.2017, 01:01 #2
1. Опишите саму задачу подробней (мне может быть тоже интересно ее сделать).
2. Не пишите капсом операторы и операторные скобки.
3. Не drow, а Draw.
4. Не надо сувать LockDrawing() внутрь цикла.
0
Ganter
0 / 0 / 1
Регистрация: 19.09.2017
Сообщений: 18
20.09.2017, 06:39  [ТС] #3
1. Опишите саму задачу подробней (мне может быть тоже интересно ее сделать).
Мне нужно , чтобы ось вращения была диаметром спирали .Как сделать так, чтобы знак вращался ровно по оси, а не под углом
2. Не пишите капсом операторы и операторные скобки.
Это нужно лишь для удобства выделения основного тела кода.
3. Не drow, а Draw.
4. Не надо сувать LockDrawing() внутрь цикла.
Спасибо , буду учитывать в будущем.
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25606 / 17159 / 6824
Регистрация: 22.10.2011
Сообщений: 30,356
Записей в блоге: 6
20.09.2017, 10:19 #4
Ganter, так:

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
uses graphabc;
var
  j: real;
 
procedure drow(j: real);
  
  function XCoord(x: integer): integer;
  begin
    result := (WindowWidth div 2) + Round((x - (WindowWidth div 2)) * cos(j));
  end;
 
var
  x, y, i: integer;
  r: real;
  g: real = 1.5 * pi;
begin
  
  moveto(xcoord(window.Width div 2), window.Height div 2);
  repeat
    x := window.Width div 2 + round(cos(g {+ j}) * r);
    y := window.Height div 2 - round(sin(g) * r);
    lineto(xcoord(x), y);
    g -= 0.01;
    if ((g < -pi / 2 + 0.2) and (i = 0)) or
       ((g < -4 * pi / 4 - 0.3) and (i = 1)) then begin
      moveto(xcoord(window.Width div 2 + round(cos(5 * pi / 4 {+ j}) * 300)), window.Height div 2 - round(sin(5 * pi / 4) * 300));
      
      lineto(xcoord(x), y);
      i += 1;
    end (*else if (g < -4 * pi / 4 - 0.3) and (i = 1) then begin
      moveto(xcoord(window.Width div 2 + round(cos(5 * pi / 4 + j) * 300)), window.Height div 2 - round(sin(5 * pi / 4) * 300));
      lineto(xcoord(x), y);
      i += 1;
    end*); 
    moveto(xcoord(x), y);
    r += 0.2;
  until g < -7 * pi / 4; 
  lineto(xcoord(x + round(cos(pi / 4 {+ j}) * 100)), y - round(sin(pi / 4) * 100));    
end;
 
 
begin
  
  pen.Color := rgb(255, 48, 48);
  pen.Width := 4;
  
  lockdrawing;
  repeat
    clearwindow(rgb(190, 190, 190));
    drow(j);
    redraw;
    j += 0.01;
  until false;                     
  
end.
?
1
Ganter
0 / 0 / 1
Регистрация: 19.09.2017
Сообщений: 18
20.09.2017, 10:52  [ТС] #5
почти , представьте монету ,обращённую к вам лицевой стороной , ось вращения - диаметр(он образует угол = 90градусов к нижней границе экрана )

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
uses graphabc;
const
n = 4;
visota = 60;
shirina = 150;
shirina1 = 0; // измените на 40 , чтобы более точно меня понять
p = (2*pi)/n;
 
x = WindowWidth div 2;
y = WindowHeight div 2;
  
var
 p1:real = 0;
 
procedure lin;
var x1,y1,x2,y2:integer;
begin
x1:=x-round(cos(p1)*shirina);
y1:=y+round(sin(p1)*shirina1);
 x2:=x-round(cos(p1+p)*shirina);
 y2:=y+round(sin(p1+p)*shirina1);
 
for var i:=1 to n do
 begin
 line(x1,y1-visota,x2,y2-visota);
 line(x1,y1+visota,x2,y2+visota);
 
 end;
 line(x1,y1-visota,x1,y1+visota);
end;
 
 
begin
LockDrawing; 
repeat
 p1+=0.04;
 
 for var i:=1 to n do
 begin
 p1+=p;
 lin;
 end;
 
 sleep(30);
 Redraw; 
clearwindow;
 
until false;
 
end.
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25606 / 17159 / 6824
Регистрация: 22.10.2011
Сообщений: 30,356
Записей в блоге: 6
20.09.2017, 11:08 #6
Ну, а у меня что? Запустить - не судьба было? Или мне видео записать, как она вращается?
0
Ganter
0 / 0 / 1
Регистрация: 19.09.2017
Сообщений: 18
20.09.2017, 11:20  [ТС] #7
x := window.Width div 2 + round(cos(g {+ j}) * r); вы похоже недавно изменили код
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25606 / 17159 / 6824
Регистрация: 22.10.2011
Сообщений: 30,356
Записей в блоге: 6
20.09.2017, 11:31 #8
Там в нескольких местах +j закомментировано, если что...
0
20.09.2017, 11:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2017, 11:31
Привет! Вот еще темы с решениями:

как сделать так чтобы когда z1 отрицательное а z2 положительное находило x3 и x4
Program kv; var a,b,c,d:real; z1,z2,x1,x2,x3,x4:real; Begin writeln( '...

как сделать так чтобы программа работала ограниченное время
Вопрос как сделать так чтобы программа работала ограниченное время напрмер 5...

Как сделать, чтобы прямоугольник вращался вокруг своей оси?
Как сделать, чтобы прямоугольник вращался вокруг своей оси? Помогите пожалуйста!

Как сделать, чтобы задаваемый текст вращался вокруг своей оси, изменяя цвет?
С графикой увы не работали, но нужно сдать любую работу по графике в C++....


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

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

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