Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск

Кто сейчас на форуме
Сейчас посетителей на форуме: 1, из них зарегистрированных: 0, скрытых: 0 и гостей: 1

Нет

[ Посмотреть весь список ]


Больше всего посетителей (9) здесь было Вс Фев 11, 2018 12:54 pm
Самые активные пользователи за неделю
Ярослав
 


Лабораторная №1 — прямоугольники

Перейти вниз

Re: Лабораторная №1 — прямоугольники

Сообщение автор Gragory023 в Пн Мар 13, 2017 10:42 am

Сделал с помощью циклов, получилось вот так.
Код:
for (int y = 250; y < height - 120; y++)
      for (int x = 100; x < width - 780; x++)
         drawPixel(x, y, 0, 255, 0);
   for (int y = 150; y < height - 250; y++)
      for (int x = 450; x < width - 700; x++)
         drawPixel(x, y, 255, 0, 0);
   for (int y = 20; y < height-550; y++)
      for (int x = 100; x < width - 850; x++)
         drawPixel(x, y, 0, 255, 255);
Хотел узнать, этого достаточно или нет?

Gragory023

Posts : 75
Join date : 2016-12-28

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Лабораторная №1 — прямоугольники

Сообщение автор Ярослав в Пн Мар 13, 2017 10:23 pm

Здорово, но странно ведёт себя при уменьшении окна. Прямоугольники сужаются, а то и вовсе исчезают. Можно как-то сделать, чтобы всегда оставалось 3 прямоугольника? Например, чтобы они растягивались / сплющивались?

ПС. Вопрос по MyStat — у вас есть способ сдавать лабы там? А то я не в курсе.
avatar
Ярослав
Admin

Posts : 548
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: Лабораторная №1 — прямоугольники

Сообщение автор Gragory023 в Вт Мар 14, 2017 11:07 am

Сделал вот , так
Код:
for (int y = 230; y < height - height / 3.5; y++)
      for (int x = 100; x < width - width/1.7; x++)
         drawPixel(x, y, 0, 255, 0);
   for (int y = 120; y < height - height /2.5; y++)
      for (int x = 400; x < width - width/1.9; x++)
         drawPixel(x, y, 255, 0, 0);
   for (int y = 20; y < height - height/1.25; y++)
      for (int x = 100; x < width / 2.7; x++)
         drawPixel(x, y, 0, 255, 255);
Теперь не исчезают)

По поводу myStat , сейчас обновили сайт, там во вкладки домашнее задание, есть подраздел Лабораторные работы, где все можно загрузить для проверки)

Gragory023

Posts : 75
Join date : 2016-12-28

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Лабораторная №1 — прямоугольники

Сообщение автор Ярослав в Вт Мар 14, 2017 1:27 pm

Если сделать окно достаточно маленьким, всё ещё исчезают:



Дело в том, что позиция прямоугольников фиксированная. При достаточно маленьком окне правая граница оказывается левее левой, и ничего не рисуется. Если делать их резиновыми, то верхний левый угол тоже должен немного сжиматься / растягиваться.


Последний раз редактировалось: Ярослав (Вт Мар 14, 2017 1:46 pm), всего редактировалось 1 раз(а)
avatar
Ярослав
Admin

Posts : 548
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: Лабораторная №1 — прямоугольники

Сообщение автор Gragory023 в Вт Мар 14, 2017 1:46 pm

А как сделать позицию прямоугольников не фиксированной?

Gragory023

Posts : 75
Join date : 2016-12-28

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Лабораторная №1 — прямоугольники

Сообщение автор Ярослав в Вт Мар 14, 2017 1:48 pm

Код:
for (int y = 230; y < height - height / 3.5; y++)
      for (int x = 100; x < width - width/1.7; x++)

Сейчас верхний край прямоугольника y = 230, а левый x = 100. Но ведь там тоже можно использовать формулу. Предлагаю поэкспериментировать.
avatar
Ярослав
Admin

Posts : 548
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: Лабораторная №1 — прямоугольники

Сообщение автор Gragory023 в Вт Мар 14, 2017 9:14 pm

Вот так получилось)
Код:
for (int y = height / 2.7; y < height - height / 3.5; y++)
      for (int x = width/12; x < width - width/1.7; x++)
         drawPixel(x, y, 0, 255, 0);
   for (int y = height / 6; y < height - height /2.5; y++)
      for (int x = width / 3.4; x < width - width/1.9; x++)
         drawPixel(x, y, 255, 0, 0);
   for (int y = height / 20; y < height - height/1.25; y++)
      for (int x = width / 12; x < width / 2.7; x++)
         drawPixel(x, y, 0, 255, 255);

Gragory023

Posts : 75
Join date : 2016-12-28

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Лабораторная №1 — прямоугольники

Сообщение автор Ярослав в Вт Мар 14, 2017 9:57 pm

Всё хорошо, но:
На белом фоне рисуются случайные прямоугольники случайных ярких цветов. Они могут перекрывать друг друга.
avatar
Ярослав
Admin

Posts : 548
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Лабораторная №1 — прямоугольники

Сообщение автор Gragory023 в Пт Мар 17, 2017 9:18 am

Сделал 4 массива, но ничего не рисует))))
Когда был массив только для цвета, с определенными точка x, y цвета менялись каждый раз.
Код:
int color[2], cordinate_x0[2], cordinate_x[2],cordinate_y0[2];
   for (int i = 0; i < 2; i++)
      color[i] = rand() % 250+ 100;
   
   for (int y = 0; y < height; y++)
      for (int x = 0; x < width; x++) {
         drawPixel(x, y, 255, 255, 255);
         drawPixel(x + 100, y, 255, 255, 255);
      }
   for (int i = 0; i < 2; i++)
      cordinate_x0[i] = rand() % 1000 + 100;
   for (int i = 0; i < 2; i++)
      cordinate_x[i] = rand() % 1500 + 500;
   for (int i = 0; i < 2; i++)
      cordinate_y0[i] = rand() % 1000 + 100;
   
   for (int y = cordinate_y0[0]; y < cordinate_y0[0]; y++)
      for (int x = cordinate_x[0]; x < cordinate_x[0]; x++)
         drawPixel(x, y, color[1], color[0], color[2]);
   for (int y = cordinate_y0[1]; y < cordinate_y0[1]; y++)
      for (int x = cordinate_x[1]; x < cordinate_x[1]; x++)
         drawPixel(x, y, color[2], color[1], color[0]);
   for (int y = cordinate_y0[2]; y < cordinate_y0[2]; y++)
      for (int x= cordinate_x[2]; x < cordinate_x[2]; x++)
         drawPixel(x, y, color[0], color[2], color[1]);
Что посоветуете?

Gragory023

Posts : 75
Join date : 2016-12-28

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Лабораторная №1 — прямоугольники

Сообщение автор Ярослав в Пт Мар 17, 2017 2:09 pm

Если я правильно понял, 2 — это число прямоугольников? Лучше бы 2 была именованной константой.

Затем возникает вопрос, все массивы — это локальные переменные или глобальные? Если локальные, то для какой функции?

В новой версии DrawLab.zip я добавил функцию init(), в которой можно произвести инициализацию переменных 1 раз в начале программы.

Ничего не рисует, потому что циклы пустые (с ложным условием сразу):
Код:
for (int y = cordinate_y0[1]; y < cordinate_y0[1]; y++)
      for (int x = cordinate_x[1]; x < cordinate_x[1]; x++)
y равняется стартовому значению, оно же конечное значение для цикла.

Напомню, что прямоугольник кодируется четвёркой: x, y, width, height. Здесь вообще отсутствуют параметры width / height.

Прямоугольник занимает размер:
• По оси X: от x до (x + width - 1)
• По оси Y: от y до (y + height - 1)
avatar
Ярослав
Admin

Posts : 548
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: Лабораторная №1 — прямоугольники

Сообщение автор Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения