Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Алгоритмы, анимация (http://www.tehnari.ru/f43/t79509/)

Гульназ.М. 19.10.2012 21:27

Алгоритмы, анимация
 
Вложений: 1
Вложение 100956 нужно указать величины(Line(....)LineTo(..),Circle(....)) этой фигуры на проге..

вот такая прога,(не к этой фигуре)только величины линии, кругов сколько там набирать не знаю как..помогите пожалуйста если поняли.. была бы очень признательна.

uses Graph,CRT;
var
Driver, Mode:Integer;
x,y,a,b:integer;
Xs,Ys:string;
k:char;
begin
Driver:=Detect;
InitGraph(Driver,Mode,' ');
if GraphResult <> grok then Halt(1);
x:=100;
y:=100;
a:=20;
repeat
SetColor(10);
Circle (x+120,y+140,a+20);
Circle (x+230,y+40,a+20);
Circle (x+340,y+140,a+20);
Line(x+190,y+40,x+120,y+100);
Line(x+270,y+40,x+340,y+100);
Line(x+230,y+80,x+160,y+140);
Line(x+230,y+80,x+300,y+140);
Line(x+160,y+140,x+230,y+200);
Line(x+230,y+200,x+300,y+140);
SetColor(0);
Str(x,Xs);
Str(y,Ys);
SetColor(5);
OutTextXY(300,150,'x='+Xs+' : y='+Ys);
k:=ReadKey;
SetColor(0);
Circle (x+120,y+140,a+20);
Circle (x+230,y+40,a+20);
Circle (x+340,y+140,a+20);
Line(x+190,y+40,x+120,y+100);
Line(x+270,y+40,x+340,y+100);
Line(x+230,y+80,x+160,y+140);
Line(x+230,y+80,x+300,y+140);
Line(x+160,y+140,x+230,y+200);
Line(x+230,y+200,x+300,y+140);

Str(x,Xs);
Str(y,Ys);
Setcolor(0);
OutTextXY(300,150,'x='+Xs+' : y='+Ys);
if k=#77 then x:=x+10;
if k=#75 then x:=x-10;
if k=#72 then y:=y-10;
if k=#80 then y:=y+10;
if k=#13 then a:=a+10;
if k=#8 then a:=a-10;
if k=#49 then b:=4;
if k=#50 then b:=2;
if k=#51 then b:=3;
if k=#52 then b:=5;
if k=#53 then b:=6;
if k=#54 then b:=7;
if k=#55 then b:=8;
if k=#56 then b:=9;
if k=#57 then b:=10;
if k=#58 then b:=1;
until k=#27;
CloseGraph;
end.

Vladimir_S 20.10.2012 09:50

Вложений: 1
Цитата:

Сообщение от Гульназ.М. (Сообщение 807106)
нужно указать величины(Line(....)LineTo(..),Circle(....)) этой фигуры на проге..

И в чем проблемы?
Код:

uses Graph,CRT;
Const
 Step=50;
var
 Driver, Mode:Integer;
 i,j:ShortInt;
 CenterX,CenterY:Word;
begin
 Driver:=Detect;
 InitGraph(Driver,Mode,' ');
 if GraphResult <> grok then Halt(1); 
 CenterX:=GetMaxX div 2;
 CenterY:=GetMaxY div 2;
 SetLineStyle(DottedLn,0,NormWidth);
 For i:=-3 to 3 do
  Line(CenterX+Step*4,CenterY+Step*i,CenterX-Step*4,CenterY+Step*i);
 For j:=-3 to 3 do
  Line(CenterX+Step*j,CenterY+Step*4,CenterX+Step*j,CenterY-Step*4);
 SetLineStyle(SolidLn,0,ThickWidth);
 Circle(CenterX,CenterY,2*Step);
 Circle(CenterX-3*Step,CenterY,Step);
 Circle(CenterX+3*Step,CenterY,Step);
 Circle(CenterX,CenterY-3*Step,Step);
 Circle(CenterX,CenterY+3*Step,Step);
 Rectangle(CenterX-4*Step,CenterY+4*Step,CenterX+4*Step,CenterY-4*Step);
 Rectangle(CenterX-3*Step,CenterY+3*Step,CenterX+3*Step,CenterY-3*Step);
 Line(CenterX-Step*4,CenterY-Step*4,CenterX+Step*4,CenterY+Step*4);
 Line(CenterX-Step*4,CenterY+Step*4,CenterX+Step*4,CenterY-Step*4);
 ReadKey;
 CloseGraph;
End.


Гульназ.М. 20.10.2012 18:47

спасибо конечно,но мне самый простой нужен был вид величин,мы такое как вы написали не проходили..а нужно по пройденному, вот как здесь:Circle (x+120,y+140,a+20);
Circle (x+230,y+40,a+20);
Circle (x+340,y+140,a+20);
Line(x+190,y+40,x+120,y+100);
Line(x+270,y+40,x+340,y+100);
Line(x+230,y+80,x+160,y+140);
Line(x+230,y+80,x+300,y+140);
Line(x+160,y+140,x+230,y+200); там x,y,r, a должны быть и по градусам..
у меня простые фигуры получаются а такая-нет,

AlexZir 20.10.2012 19:27

GetMaxX - возвращает максимальную координату по оси OX
GetMaxY - возвращает максимальную координату по оси OY
SetLineStyle - задает стиль линий, в данном случае используются линии двух типов - штриховые и сплошные.

Переменные CenterX и CenterY содержат соответственно координаты середины экрана, отталкиваясь от этой точки и вычисляются координаты для прямоугольников, окружностей и линий. Переменная Step задает величину сдвига координат, это то же самое, что вы к x (к y) прибавляете (или отнимаете) какое-то число.

В принципе, основные непонятки разъяснил, более подробно читайте здесь: http://www.tehnari.ru/attachments/f2...adhaiienoa.zip

Vladimir_S 20.10.2012 20:15

Лёш, спасибо за помощь, потому как я претензий уважаемой Гульназ не понял напрочь. Мне-то казалось, что всё предельно просто: прямоугольники, круги, линии... И градусы зачем-то понадобились - как будто там дуги иди эллипсы... Ну и ладно - не подошло, и пёс с ним: у меня эта "программа" заняла 10 минут, не жалко.

А вообще последнее время это сплошное нытьё обращающихся за помощью на тему "сделайте не так, как надо, а в пределах того, что мы проходили" изрядно достает. То им функцию нельзя: "не проходили", то, вишь, "как хотите, но чтобы без циклов, циклов мы не знаем" ну и т.п. Между прочим, если это преподские требования типа "ни шагу за рамки того, что "проходили"", то таких преподов нужно IMHO отстреливать, чтобы не мучились.


А вообще давно подозреваю, что что-то с госпожой Гульназ.М. "нечисто": ну не может такого быть, чтобы студентке приходилось сегодня писать формы отчетов на HTML, завтра - создавать базы данных через формы Delphi, послезавтра - осваивать программную установку приложений, а потом вдруг нырять как с вершины Ниагарского водопада в детски-примитивные задачки на Паскале, да еще с рефреном "мы не проходили". Вот думаю, не работает ли под вывеской Гульназ.М. бюро добрых (небескорыстных) услуг лоботрясам-студентам? Если так, то, как говорит герой одного мультика, "это нам обидно!". :D

P.S. Кстати, сейчас заметил: с циклами построения сетки несколько "перемудрил". Исправил.

AlexZir 20.10.2012 20:25

Цитата:

Сообщение от Vladimir_S (Сообщение 807574)
не работает ли под вывеской Гульназ.М. бюро добрых (небескорыстных) услуг лоботрясам-студентам

Не исключено, и, думаю, не только студентам, а просто лоботрясам. :(

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

Vladimir_S 20.10.2012 20:31

Цитата:

Сообщение от AlexZir (Сообщение 807580)
Я вот только не пойму, при чем тут, собственно, анимация?

Этого я тоже не понял.

AlexZir 20.10.2012 20:33

В первом посте прописан цикл отработки нажатия клавиш с пересчетом координат :)

Vladimir_S 20.10.2012 20:37

Цитата:

Сообщение от AlexZir (Сообщение 807586)
В первом посте прописан цикл отработки нажатия клавиш с пересчетом координат :)

Да могём и это, но тогда задание надо внятно формулировать.

Vladimir_S 20.10.2012 20:41

Цитата:

Сообщение от AlexZir (Сообщение 807580)
Владимир, а вы зачем из первоначального листинга исключили отработку нажатия клавиш? Насколько я понял, в первоначальном листинге что-то вроде прицела рисуется, а под анимацией надо понимать сдвиг прицела в определенном направлении в зависимости от нажатой клавиши.

Леша, по секрету tehno030: а я вообще листинг не разбирал, посмотрел на фигуру нарисованную, да и написал программу ейного построения. Только тс...с!


Часовой пояс GMT +4, время: 01:36.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.