IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> вращение диска
Sensitive
сообщение 2.06.2007 13:32
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 132
Пол: Женский
Реальное имя: Юлия

Репутация: -  0  +


Вообще не знаю каким способом делать эту задачу.
Условие прилагается. Подскажите пожалуйста, как это всё реализовать.


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 6.06.2007 20:29
Сообщение #2


Гость






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

Запусти вот это, к примеру:
uses graph;

procedure disk(f: real; r:integer);

const delta = 6;
procedure put_arc(start, finish: integer;
var r_out: integer);
var
xs_in, ys_in, xf_in, yf_in: integer;
arc_coords: arccoordstype;
begin
arc(0, 0, round(start + f),round(finish + f), r_out);
getarccoords(arc_coords);
with arc_coords do begin
xs_in := xstart; ys_in := ystart;
xf_in := xend; yf_in := yend;
end;

dec(r_out, delta);

arc(0, 0, round(start + f), round(finish + f), r_out);
getarccoords(arc_coords);
with arc_coords do begin
line(xs_in, ys_in, xstart, ystart);
line(xf_in, yf_in, xend, yend);
end;
end;

begin
arc(0,0,round(180+180*f/pi)-1,round(360+180*f/pi)+1,r);

dec(r, 16);
put_arc(135, 180, r);
put_arc(90, 135, r);
put_arc(45, 90, r);
put_arc(0, 45, r);
end;

var gd, gm: integer;

begin
initgraph(gd, gm, '');
setviewport(getmaxx div 2, getmaxy div 2, getmaxx, getmaxy, false);
disk(0, 50);
readln;
closegraph;
end.

 К началу страницы 
+ Ответить 
Sensitive
сообщение 6.06.2007 23:32
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 132
Пол: Женский
Реальное имя: Юлия

Репутация: -  0  +


да,действительно и без ручного расчета тот код,что ты дал работает верно. Но я теперь не могу понять,как теперь остаток программы переделать. У меня всё получается делается для рисунка,если черные линиии справа...не могу понять что нужно изменить...или всё переделать надо?

uses   graph,crt; 
const r = 100; d = 9000 ; df = pi/50;
var f:real; i , k:integer ;
Procedure disk(f:real;r:integer); {ваша процедура}
const delta=6;
procedure put_arc(start,finish:integer; var r_out:integer);
var xs_in,ys_in,xf_in,yf_in,r2:integer;
arc_coords:arccoordstype;
begin
r2:=r+1;
arc(0,0,round(start+f),round(finish+f),r_out);
getarccoords(arc_coords);
with arc_coords do begin
xs_in:=xstart;ys_in:=ystart;
xf_in:=xend;yf_in:=yend;
end;
dec(r_out,delta);
arc(0,0,round(start+f),round(finish+f),r_out);
getarccoords(arc_coords);
with arc_coords do begin
line(xs_in,ys_in,xstart,ystart);
line(xf_in,yf_in,xend,yend);
end;
end;
begin
arc(0,0,round(180+180*f/pi)-1,round(360+180*f/pi)+1,r);
dec(r,16);
put_arc(135,180,r);
put_arc(90,135,r);
put_arc(45,90,r);
put_arc(0,45,r);
end;

begin
init;{инициализация граф режима}
setbkcolor(15);
setpalette(1,0);
setviewport(getmaxx div 2,getmaxy div 2,getmaxx,getmaxy,false);
f:=2*pi;
k:=1;
i:=0;
repeat
if (i=100) or (i=-100) then begin f:=2*pi; i:=0 end;
setcolor(1);
disk(f,r); {изменила параметры}
delay(d);
setcolor(15);
setfillstyle(1,15);
fillellipse(0,0,r+1,r+1);
if keypressed then
if readkey=#0 then
case ord(readkey) of
59: k:=-1;
68: k:=1;
79: halt;
end;
i:=i+k;
f:=f+df*k;
until false;
end.


P.S. Не знаю как сделать правильно движение это...подскажите, как сделать правильно поворот?

Сообщение отредактировано: Sensitive - 7.06.2007 15:29
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Sensitive
сообщение 9.06.2007 13:32
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 132
Пол: Женский
Реальное имя: Юлия

Репутация: -  0  +


С диском так и "воюю"...
как закрасить диск,если программа выглядит таким образом:

uses   graph,crt; 
const r = 100; d = 9000 ; df = pi/50;
var f:real; i , k:integer ;
begin
init;
setbkcolor(15);
setpalette(1,0);
setviewport(getmaxx div 2,getmaxy div 2,getmaxx,getmaxy,false);
f:=2*pi;
k:=1;
i:=0;
repeat
if (i=100) or (i=-100) then begin f:=2*pi; i:=0 end;
setcolor(1);
disk(f,r);
delay(8000);
setcolor(15);
setfillstyle(1,15);
fillellipse(0,0,r+1,r+1);
if keypressed then
if readkey=#0 then
case ord(readkey) of
59: k:=-1;
68: k:=1;
79: halt;
end;
i:=i+k;
f:=f+df*60*k;
until false;
end.


И в чём ошибка: почему "еллипс"(точнее его часть) вращается намного быстрее,чем дуги... blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Sensitive   вращение диска   2.06.2007 13:32
volvo   Если на диске должен быть только черный и белый се...   2.06.2007 18:11
Sensitive   Да,на диске на белой его части есть частички (чёрн...   2.06.2007 18:28
volvo   Несколько способов есть здесь (перевести то, что т...   2.06.2007 19:03
klem4   Помоему будет достаточно одного угла, второй то ...   2.06.2007 20:39
Sensitive   volvo, если можешь дай полную ссылку. Не смогла на...   2.06.2007 20:49
volvo   Если диск разделен по диаметру, то хватит и одного...   2.06.2007 20:47
volvo   Sensitive, я же дал полный путь к статьям :blink:...   2.06.2007 20:55
Sensitive   Ой,сорри,volvo, всё нашла. Сейчас буду разбираться...   2.06.2007 21:28
klem4   Вроде этого cx := GetMaxX div 2; cy := GetMaxY ...   2.06.2007 20:56
klem4   В общем вот черновой вариант, есть небольшие несты...   2.06.2007 21:57
Sensitive   К моему сожалению не смогла разобраться в тех прим...   4.06.2007 16:30
Sensitive   к моему сожалению не смогла разобраться в тех прим...   4.06.2007 16:33
Sensitive   Я прошу прощения еще раз... при повороте изображен...   5.06.2007 18:04
klem4   В твоем конкретном случае, при использовании предл...   5.06.2007 18:08
Sensitive   всё сижу над этим диском... вот подпрограмма,котор...   6.06.2007 18:54
volvo   Зачем тебе вручную рассчитывать все координаты, ко...   6.06.2007 20:29
Sensitive   да,действительно и без ручного расчета тот код,что...   6.06.2007 23:32
Sensitive   С диском так и "воюю"... как закрасить д...   9.06.2007 13:32
volvo   Вот так вращается одинаково: uses graph, crt; pro...   9.06.2007 14:10
Sensitive   volvo,спасибо большое. Программу почти доделала с ...   9.06.2007 16:27


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 21.06.2025 23:11
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"