Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

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

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

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

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

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

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

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


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

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

Код:

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, 17:58   #17
NEymexa:c
Пользователь
 
Регистрация: 26.02.2015
Сообщений: 24
Репутация: 25
По умолчанию

Цитата:
Сообщение от 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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
графика Паскаль - движение фигуры Nataly026 Паскаль 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 15:31


23:35.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.