Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ помогите вращение окружности

Автор: -Алексей- 21.06.2008 18:32

как сделать вращение окружности... !! на pascal, пример колесо от велосипеда

Автор: renesko1 21.06.2008 20:08

Вот сделал из старой проги, которая была написана как тест к модулю.
Правдо все коряво из-за того, что она не была предназначена для рисования великого колеса(хаболгисты из
fallout) но все же.
Прикрепленный файл  xabologia.rar ( 51.66 килобайт ) Кол-во скачиваний: 412


Добавлено через 2 мин.
расстояние лучше задай около 200, а delay взависемости от твоего компа в целом 1000 это 1 сек.

Добавлено через 4 мин.
черт забыл код... Прикрепленный файл  dop.rar ( 62.83 килобайт ) Кол-во скачиваний: 410

delay можно и 0 так лучше, а дополнительнвй луч это моя погрешность у меня окружность равна 6.3 радиан.

Добавлено через 3 мин.
Введите кол во базовых точек 8
Расстояние от центра 200
delay - 0
вот неплохая комбинация

Автор: Гость 21.06.2008 20:44

renesko1, а можешь сделать, еще, что нибудь типа чтобы при нажатии на клавищу курсора влево, колесо куртилось влево, и вправо также, и чтобы их было два, на одном экране..

Автор: renesko1 21.06.2008 21:09

Каламбур и бред в коду, бузумство копирования и непристойность стиля : у тебя эту прогу наверное не возьмут.
Но у меня приступ альтруизма smile.gif .


program arci;

uses graph, crt, unitlinkedList ;

const

krug = 6.3 ;
grDriver : integer = Detect ;

var

l, l1 : linkList ;
Colvo, grMode : integer ;
Npoint1, Npoint2 : integer ;
cer : real ;
stepAlfa, alfa : real ;
i, max, time : integer ;

x , y : integer ;
x0 , y0 : integer ;

x1, y1,xx,yy,j : integer ;
{****************************************************************}

procedure raspolog (const col : integer ;
const cer , stepalfa : real ) ;

const
krug = 6.3 ;

var

x0, y0, x, y, x1, y1,xx,yy : integer ;
alfa : real ;
i : integer ;
// stro : string ;

begin


alfa := 0 ;
x0 := getmaxx div 4 ;
y0 := getmaxy div 2 ;
// stepAlfa := krug / col ;
alfa := alfa + stepAlfa ;

x := round(x0 + cos ( alfa ) * cer ) ;
y := round(y0 + sin ( alfa ) * cer ) ;
line(x0, y0, x, y);

xx := (getmaxx div 4) * 3 ;
yy := y0 ;

x1 := round(xx + cos ( alfa ) * cer ) ;
y1 := round(yy + sin ( alfa ) * cer ) ;
line(xx, yy, x1, y1);


// Arc(x,y,0,360,1);
// outtextXY(x, y,'0');


L.Init(0, x, y) ;
l1.Init(0, x1, y1);


for i := 1 to col-1 do
begin

alfa := alfa + stepAlfa ;

x := round(x0 + cos ( alfa ) * cer ) ; //ключевая формула ей надо use если точки ориентированы вокруг оси
y := round(y0 + sin ( alfa ) * cer ) ; // alfa = angle(rad) ; cer = length from center

x1 := round(xx + cos ( alfa ) * cer ) ;
y1 := round(yy + sin ( alfa ) * cer ) ;

l.AddInEnd(x,y);
line(x0, y0, x, y);

l1.AddInEnd(x1,y1);
line(xx, yy, x1, y1);
// str(i, stro ) ;
// outtextXY(x, y,stro);
// Arc(x,y,0,360,1);

end ;

end ;
{********************************************************************}

{--main programm ------------------------------}

Begin
clrscr ;

InitGraph (grDriver, grMode, '') ;

write('Введите кол во базовых точек '); readln(Colvo);
write('Расстояние от центра '); readln(cer) ;
write('delay - ') ; readln(time) ;
write('links 1, recht 2 '); readln(j);

stepAlfa := krug / colvo ;

raspolog(ColVo, Cer, stepalfa) ;

x0 := getmaxx div 4 ;
y0 := getmaxy div 2 ;

xx := (getmaxx div 4) * 3 ;
yy := y0 ;

arc(x0, y0, 0, 360,round(cer));
arc(xx, yy, 0, 360,round(cer));

readkey ;

while true do
begin

{ write('Enter number 1 point '); readln(npoint1) ;
write('2 point '); readln(Npoint2);

l.extrackt(Npoint1, x1, y1);
l.extrackt(Npoint2, x2, y2);
line(x1,y1,x2,y2); }
max := l.richtkey ;
arc(x0, y0, 0, 360,round(cer));
arc(xx, yy, 0, 360,round(cer));
// writeln(max);

for i := 0 to max do begin
if j = 1 then
alfa := alfa + stepalfa + 0.1
else alfa := alfa + stepalfa - 0.1 ;
// delay(100);
l.extrackt(i, x, y);
setcolor(0);
line(x0, y0, x, y);
x := round(x0 + cos ( alfa ) * cer ) ;
y := round(y0 + sin ( alfa ) * cer ) ;
setcolor(15);
line(x0, y0, x, y);
l.delbykey(i);
l.addinend(x,y);
end ;

max := l1.richtkey ;
for i := 0 to max do begin
if j = 1 then
alfa := alfa + stepalfa + 0.1
else alfa := alfa + stepalfa - 0.1 ;
// delay(100);
l1.extrackt(i, x1, y1);
setcolor(0);
line(xx, yy, x1, y1);
x1 := round(xx + cos ( alfa ) * cer ) ;
y1 := round(yy + sin ( alfa ) * cer ) ;
setcolor(15);
line(xx, yy, x1, y1);
l1.delbykey(i);
l1.addinend(x1,y1);
end ;



delay(time);

end ;

readln ;

end .



Добавлено через 10 мин.
если хочешь про вращение вправо влево менять динамически то сделая переменную bool и меняй направление
вз от ее значения ввод с клавы не останавливая прорисрвку

procedure cursor_keys ;

var

key : char ;

begin

if keypressed then begin
key := readkey ;
case ord(key) of /// коды клавишь и дейсвия
45 : ....
34: ....

end ;

end ;
end ;


Автор: Гость 21.06.2008 22:01

спасибо

Автор: renesko1 21.06.2008 22:23

Всегда пожалуйсто smile.gif

Автор: Гость 21.06.2008 22:57

прощу прощения, но у меня при компиляции ругается unitlinkedList .tpu ??

Автор: renesko1 21.06.2008 23:02

Сложи все что я переслал в одну кучу. А модуль засунь в папку с модулями.
unitlinkedList .tpu это модуль вроде я его выложил.
смотри архив с названием dop

Автор: Гость 21.06.2008 23:07

у тебя ася есь

Автор: renesko1 21.06.2008 23:09

Зарегестрируйся и напиши в приват (кажется) а так нет.

Автор: foxix 21.06.2008 23:17

зарегился