как сделать вращение окружности... !! на pascal, пример колесо от велосипеда
renesko1
21.06.2008 16:08
Вот сделал из старой проги, которая была написана как тест к модулю. Правдо все коряво из-за того, что она не была предназначена для рисования великого колеса(хаболгисты из fallout) но все же. Нажмите для просмотра прикрепленного файла
Добавлено через 2 мин. расстояние лучше задай около 200, а delay взависемости от твоего компа в целом 1000 это 1 сек.
Добавлено через 4 мин. черт забыл код... Нажмите для просмотра прикрепленного файла delay можно и 0 так лучше, а дополнительнвй луч это моя погрешность у меня окружность равна 6.3 радиан.
Добавлено через 3 мин. Введите кол во базовых точек 8 Расстояние от центра 200 delay - 0 вот неплохая комбинация
Гость
21.06.2008 16:44
renesko1, а можешь сделать, еще, что нибудь типа чтобы при нажатии на клавищу курсора влево, колесо куртилось влево, и вправо также, и чтобы их было два, на одном экране..
renesko1
21.06.2008 17:09
Каламбур и бред в коду, бузумство копирования и непристойность стиля : у тебя эту прогу наверное не возьмут. Но у меня приступ альтруизма .
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 div4 ;
y0 := getmaxy div2 ;
// 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 div4) * 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 := 1to col-1dobegin
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 div4 ;
y0 := getmaxy div2 ;
xx := (getmaxx div4) * 3 ;
yy := y0 ;
arc(x0, y0, 0, 360,round(cer));
arc(xx, yy, 0, 360,round(cer));
readkey ;
while true dobegin{ 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 := 0to max dobeginif j = 1then
alfa := alfa + stepalfa + 0.1else 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 := 0to max dobeginif j = 1then
alfa := alfa + stepalfa + 0.1else 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 ;
beginif keypressed thenbegin
key := readkey ;
case ord(key) of/// коды клавишь и дейсвия
45 : ....
34: ....
end ;
end ;
end ;
Гость
21.06.2008 18:01
спасибо
renesko1
21.06.2008 18:23
Всегда пожалуйсто
Гость
21.06.2008 18:57
прощу прощения, но у меня при компиляции ругается unitlinkedList .tpu ??
renesko1
21.06.2008 19:02
Сложи все что я переслал в одну кучу. А модуль засунь в папку с модулями. unitlinkedList .tpu это модуль вроде я его выложил. смотри архив с названием dop
Гость
21.06.2008 19:07
у тебя ася есь
renesko1
21.06.2008 19:09
Зарегестрируйся и напиши в приват (кажется) а так нет.
foxix
21.06.2008 19:17
зарегился
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.