Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2015, 13:45   #11
NEymexa:c
Пользователь
 
Регистрация: 26.02.2015
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Пожалуйста!
Ещё можно алгоритм(код) улучшать/оптимизировать (вынести общие части за пределы проверок нажатой клавиши, учитывать, что если позиция не изменилась, то нет смысла перевыводить многоугольник на том же самом месте и т.д.).
Но, если Вас устраивает, то можно и так оставить

Один вопрос.. как прижать к левому углу ?
NEymexa:c вне форума Ответить с цитированием
Старый 13.05.2015, 14:38   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от NEymexa:c Посмотреть сообщение
Один вопрос.. как прижать к левому углу ?
а покажите скриншоты-иллюстрации:
- как сейчас максимально влево-вверху
- как, по вашему мнению, должно быть в "прижатом" состоянии.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.05.2015, 16:22   #13
NEymexa:c
Пользователь
 
Регистрация: 26.02.2015
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а покажите скриншоты-иллюстрации:
- как сейчас максимально влево-вверху
- как, по вашему мнению, должно быть в "прижатом" состоянии.
Йой, описка... К левой стороне конечно. Извините.. не заметил
NEymexa:c вне форума Ответить с цитированием
Старый 13.05.2015, 16:40   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
    write('Введите длину стороны:');
    readln(str_ug);
какую длину стороны ты вводишь?

Цитата:
К левой стороне конечно.
в принципе, можно ЕЩЁ один костыль вставить!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.05.2015, 16:42   #15
NEymexa:c
Пользователь
 
Регистрация: 26.02.2015
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
какую длину стороны ты вводишь?


в принципе, можно ЕЩЁ один костыль вставить!
от 100 до 150... При маленьком размере не заметно, но.. преподаватель =)

Вправо сделал по аналогии с движением вниз, а вот к левой стороне не как не получается
NEymexa:c вне форума Ответить с цитированием
Старый 13.05.2015, 16:48   #16
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:

procedure f_ugol(n,x,y,r:integer);{// процедура многоугольника}
var p:array[1..6] of pointtype;
    i,maxY, deltaY, minX:integer;
    a,da:real;
begin
a:=pi/2;
da:=2*pi/n;
for i:=1 to n do
 begin
  p[i].X:=x+round(r*cos(a));
  p[i].Y:=y-round(r*sin(a));
  a:=a+da
 end;
p[n+1]:=p[1];

{korrekcia sdvig vniz}
if (y+r)=GetMaxY then begin
 maxY := p[1].Y;
 for i:=2 to n do
    if p[i].Y>maxY
      then maxY := p[i].Y;
 deltaY := GetMaxY - MaxY;
 if deltaY>0 then
   for i:=1 to n+1 do
      p[i].Y := p[i].Y + deltaY;
end; 

{korrekcia sdvig vlevo}
if (x-r)=0 then begin
 minX := p[1].X;
 for i:=2 to n do
    if p[i].X<minX
      then minX := p[i].X;
 if minX>0 then
   for i:=1 to n+1 do
      p[i].X := p[i].X - minX;
end;

setcolor(15);
setfillstyle(1, 15);
fillpoly(n+1,p); 
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.05.2015, 16:58   #17
NEymexa:c
Пользователь
 
Регистрация: 26.02.2015
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Код:

procedure f_ugol(n,x,y,r:integer);{// процедура многоугольника}
var p:array[1..6] of pointtype;
    i,maxY, deltaY, minX:integer;
    a,da:real;
begin
a:=pi/2;
da:=2*pi/n;
for i:=1 to n do
 begin
  p[i].X:=x+round(r*cos(a));
  p[i].Y:=y-round(r*sin(a));
  a:=a+da
 end;
p[n+1]:=p[1];

{korrekcia sdvig vniz}
if (y+r)=GetMaxY then begin
 maxY := p[1].Y;
 for i:=2 to n do
    if p[i].Y>maxY
      then maxY := p[i].Y;
 deltaY := GetMaxY - MaxY;
 if deltaY>0 then
   for i:=1 to n+1 do
      p[i].Y := p[i].Y + deltaY;
end; 

{korrekcia sdvig vlevo}
if (x-r)=0 then begin
 minX := p[1].X;
 for i:=2 to n do
    if p[i].X<minX
      then minX := p[i].X;
 if minX>0 then
   for i:=1 to n+1 do
      p[i].X := p[i].X - minX;
end;

setcolor(15);
setfillstyle(1, 15);
fillpoly(n+1,p); 
end;
Большое спасибо за помощь!)
Понял свою ошибку )
NEymexa:c вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
графика Паскаль - движение фигуры Nataly026 Паскаль, Turbo Pascal, PascalABC.NET 6 18.04.2012 23:20
Движение одной фигуры,вслед изменения высоты другой фигуры. 7vlad37 Microsoft Office Excel 3 21.07.2011 18:01
движение языков пламени или костер (огонь) - графика на Pascal ABC Дариiя Помощь студентам 2 19.06.2011 17:55
Графика в Turbo Pascal 7.0 Seleznev N. Помощь студентам 2 09.02.2011 14:31