• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Алгоритмы, анимация

Гульназ.М.

Новые
Регистрация
1 Фев 2012
Сообщения
75
Реакции
0
Баллы
0
Алгоритмы, анимация

Фото0377.webp нужно указать величины(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.
 
Последнее редактирование:
нужно указать величины(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.
 

Вложения

  • ffgg.webp
    ffgg.webp
    24.7 KB · Просмотры: 75
спасибо конечно,но мне самый простой нужен был вид величин,мы такое как вы написали не проходили..а нужно по пройденному, вот как здесь: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 должны быть и по градусам..
у меня простые фигуры получаются а такая-нет,
 
GetMaxX - возвращает максимальную координату по оси OX
GetMaxY - возвращает максимальную координату по оси OY
SetLineStyle - задает стиль линий, в данном случае используются линии двух типов - штриховые и сплошные.

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

В принципе, основные непонятки разъяснил, более подробно читайте здесь: http://www.tehnari.ru/attachments/f22/39654d1307071276-dhoeiaiaenoai-idhiadhaiienoa.zip
 
Лёш, спасибо за помощь, потому как я претензий уважаемой Гульназ не понял напрочь. Мне-то казалось, что всё предельно просто: прямоугольники, круги, линии... И градусы зачем-то понадобились - как будто там дуги иди эллипсы... Ну и ладно - не подошло, и пёс с ним: у меня эта "программа" заняла 10 минут, не жалко.

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


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

P.S. Кстати, сейчас заметил: с циклами построения сетки несколько "перемудрил". Исправил.
 
не работает ли под вывеской Гульназ.М. бюро добрых (небескорыстных) услуг лоботрясам-студентам
Не исключено, и, думаю, не только студентам, а просто лоботрясам. :(

Владимир, а вы зачем из первоначального листинга исключили отработку нажатия клавиш? Насколько я понял, в первоначальном листинге что-то вроде прицела рисуется, а под анимацией надо понимать сдвиг прицела в определенном направлении в зависимости от нажатой клавиши.
 
В первом посте прописан цикл отработки нажатия клавиш с пересчетом координат :)
 
Владимир, а вы зачем из первоначального листинга исключили отработку нажатия клавиш? Насколько я понял, в первоначальном листинге что-то вроде прицела рисуется, а под анимацией надо понимать сдвиг прицела в определенном направлении в зависимости от нажатой клавиши.
Леша, по секрету tehno030: а я вообще листинг не разбирал, посмотрел на фигуру нарисованную, да и написал программу ейного построения. Только тс...с!
 
Я так и понял :)

Мне было бы проще с памятью работать, один раз картинку вывести, считать в память, потом выводить куда хочешь, естественно, изменяя начальную координату спрайта в допустимых пределах, чем каждый раз прицел заново отрисовывать :))
 
ну ясно тогда,спасибо за помощь,зря пудрила мозги вам..самим надо думать,больше не буду доставать вас..туплю я, боюсь неправильно сделать а вы то профессионалы у вас тоже вначале наверно были ошибки,и не получалось.надо работать над всем этим,поработаю по полной,просто еще лень берет и других дел полно по другим предметам..извиняюсь за свою тупость...
 
ну что уж поделаешь,такое учеб.заведение..не универ же,всего лишь училище пока,и то не хотела на такой факультет идти..пришлось больше некуда было идти(
 
опачки,вот посмотрите,я написала эту программу,что вы написали да, и вот вышла эта фигура:на полный экран и большая такая.. я поняла,я неправильно свое задание походу расписала.. там не такой большой рисунок нужен, а средний а можно сказать такой же как на фото был.. и чтобы с клавишами "вверх,вниз,налево направо" можно было двигать ее.. извините, вы все отлично сделали а я задание не правильно сформулировала свое:(
 
может можно сделать как нибудь тут в этой проге чтобы меньше была и двигалась чтобы
 
Все можно сделать, но сначала ответьте на вопрос:
Вы сделали над собой усилие и прочитали ту литературу, что я вам посоветовал?
 
может можно сделать как нибудь тут в этой проге чтобы меньше была и двигалась чтобы
Можно - всё в нашей власти. Между прочим, масштаб фигуры задает константа Step, для этого она и введена. Вот Вам с движением, управляется клавишами-стрелками, выход - Esc, масштаб фигуры и шаг перемещения задается константами Step и Step_move, соответственно. Сразу оговорюсь: манипуляциями с памятью и погружением в оную графического объекта я владею слабо, потому задача решена по рабоче-крестьянски. Если надо именно со всякими там PutImage-GetImage, то это к Лёше (AlexZir).
Код:
uses Graph,CRT;
Const
 Step=10;
 Step_move=4;
var
 Driver, Mode:Integer;
 CenterX,CenterY:Integer;
 Clr_for,Clr_bck:Word;
 Ch:Char;

Procedure Figure(Clrf,XcF,YcF:Word);
begin
 SetColor(Clrf);
 Circle(XcF,YcF,2*Step);
 Circle(XcF-3*Step,YcF,Step);
 Circle(XcF+3*Step,YcF,Step);
 Circle(XcF,YcF-3*Step,Step);
 Circle(XcF,YcF+3*Step,Step);
 Rectangle(XcF-4*Step,YcF+4*Step,XcF+4*Step,YcF-4*Step);
 Rectangle(XcF-3*Step,YcF+3*Step,XcF+3*Step,YcF-3*Step);
 Line(XcF-Step*4,YcF-Step*4,XcF+Step*4,YcF+Step*4);
 Line(XcF-Step*4,YcF+Step*4,XcF+Step*4,YcF-Step*4);
end;

Begin
 Driver:=Detect;
 InitGraph(Driver,Mode,' ');
 if GraphResult <> grok then Halt(1);
 CenterX:=(GetMaxX+1) div 2;
 CenterY:=(GetMaxY+1) div 2;
 Clr_for:=GetColor;
 Clr_bck:=GetBkColor;
 SetLineStyle(SolidLn,0,ThickWidth);
 Figure(Clr_for,CenterX,CenterY);
 Repeat
  Ch:=ReadKey;
  If (Ch=#72) and (CenterY-Step*4>=Step_move) then
   begin
    Figure(Clr_bck,CenterX,CenterY);
    CenterY:=CenterY-Step_move;
    Figure(Clr_for,CenterX,CenterY);
   end
  else
  If (Ch=#75) and (CenterX-Step*4>=Step_move) then
   begin
    Figure(Clr_bck,CenterX,CenterY);
    CenterX:=CenterX-Step_move;
    Figure(Clr_for,CenterX,CenterY);
   end
  else
  If (Ch=#80) and (CenterY+Step*4<=GetMaxY-Step_move) then
   begin
    Figure(Clr_bck,CenterX,CenterY);
    CenterY:=CenterY+Step_move;
    Figure(Clr_for,CenterX,CenterY);
   end
  else
  If (Ch=#77) and (CenterX+Step*4<=GetMaxX-Step_move) then
   begin
    Figure(Clr_bck,CenterX,CenterY);
    CenterX:=CenterX+Step_move;
    Figure(Clr_for,CenterX,CenterY);
   end
  else
  If Ch=#27 then CloseGraph;
 Until Ch=#27;
End.
 
Да,просмотрела и про модуль граф все там нашла
 
В первом посте прописан цикл отработки нажатия клавиш с пересчетом координат :)
вот именно,так и нужно было мне вот только мой рисунок также сделать.. только не могла объяснить толком.чтобы нажимая на стрелки рисунок двигался и координаты показывало-и они менялись при движении прямо.. раз могёте, дерзайте плиз)
 
вот именно,так и нужно было мне вот только мой рисунок также сделать.. только не могла объяснить толком.чтобы нажимая на стрелки рисунок двигался и координаты показывало-и они менялись при движении прямо.. раз могёте, дерзайте плиз)
Ничего не понимаю. Я же Вам сделал программу - и рисунок, и всё двигается. Что еще не так?
 
Назад
Сверху