Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
29 / 24 / 5
Регистрация: 15.10.2019
Сообщений: 268

Рисую карту клумб, проблема с созданием цвета

07.03.2020, 09:01. Показов 3480. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необходимо нарисовать карту разбивки клумб на участке.
Напишите функцию fleur(size, bg_color, *houses), принимающую параметры:
size - кортеж из двух значений (ширина и длина участка);
bg_color - строка, описывающая цвет фона в шестнадцатеричном
представлении;
*houses - список кортежей из трех значений: горизонтальная и
вертикальная координаты клумбы на карте, радиус клумбы (целое число).
Функция должна вернуть объект готовой карты, клумбы на которой отмечены
кругами, центры которых совпадают с координатами, указанными в списке houses.
Круги должны быть серого цвета, значение (все 3 составляющих цвета) которого
вычисляется по формуле (Р * 100) % 256, где Р - радиус клумбы.

не знал как рисовать круги, но вроде высчитал крайние точки, теперь проблема с его цветом, не знаю, как с помощью формулы сделать цвет в шестнадцатеричном представление.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from PIL import Image, ImageDraw
 
 
def fleur(size, bg_color, *houses):
    im = Image.new('RGB', size, color=bg_color)
    drawer = ImageDraw.Draw(im)
    for i in houses:
        # ниже попытка высчитать крайние точки круга
        x1 = (int(i[0]) + int(i[2])) / int(size[0])
        y1 = (int(i[1]) + int(i[2])) / int(size[1])
        x2 = (int(i[0]) - int(i[2])) / int(size[0])
        y2 = (int(i[1]) - int(i[2])) / int(size[1])
        # попытка вычесть цвет 
        drawer.ellipse((
            (int(y1 * size[0]), int(x1 * size[1])),
            (int(y2 * size[0]), int(x2 * size[1])),
            ((i[2] * 100) % 256, (i[2] * 100) % 256, (i[2] * 100) % 256)
        ))
    im.save('res.png')
 
 
fleur((200, 200), '#FF0000', (30, 100, 10), (180, 100, 20), (100, 20, 30))
Добавлено через 3 минуты
А сделав вот так, получил только фон, а кругов нет

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from PIL import Image, ImageDraw
 
 
def fleur(size, bg_color, *houses):
    color = '#FF00FF'
    im = Image.new('RGB', size, color=bg_color)
    drawer = ImageDraw.Draw(im)
    for i in houses:
        # ниже попытка высчитать крайние точки круга
        x1 = (int(i[0]) + int(i[2])) / int(size[0])
        y1 = (int(i[1]) + int(i[2])) / int(size[1])
        x2 = (int(i[0]) - int(i[2])) / int(size[0])
        y2 = (int(i[1]) - int(i[2])) / int(size[1])
        # попытка вычесть цвет
        drawer.ellipse((
            (int(y1 * size[0]), int(x1 * size[1])),
            (int(y2 * size[0]), int(x2 * size[1]))),
            color)
    im.save('res.png')
 
 
fleur((200, 200), '#FF0000', (30, 100, 10), (180, 100, 20), (100, 20, 30))
Добавлено через 28 секунд
значит проблема с рисованием кругов еще
Помогите, пожалуйста.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.03.2020, 09:01
Ответы с готовыми решениями:

Рисую елку, проблема с полигонами
Рисую я вот эту елку. Сделал вроде листву с помощью полигона, соед. начало и конец(откуда начал, туда и пришел), но программа, выдает...

Проблема с созданием формы
Нужно создать дополнителную форму, которая появится при нажатии на кнопку. Пробовал в дельфи procedure TForm1.Button1Click(Sender:...

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

8
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
07.03.2020, 10:05
Видимо Draw надо вызывать не до размещения кругов, а после, перед save..
0
29 / 24 / 5
Регистрация: 15.10.2019
Сообщений: 268
07.03.2020, 10:17  [ТС]
u235, так выдает ошибку
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
07.03.2020, 11:30
billy121, я был не прав, у вас все верно. Только координаты для элипсов 15-18 строках должны быть от меньшего к большему, т.е. допустимо (20, 40, 110, 90), а не (110, 40, 90, 20) как у вас. Т.е. две начальные координаты должны быть меньше, чем две конечные.
И скобок у вас много там же. Должен быть кортеж из 4-х чисел.

Добавлено через 10 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from PIL import Image, ImageDraw
def fleur(size, bg_color, *houses):
    color = '#FF00FF'
    im = Image.new('RGB', size, color=bg_color)
    drawer = ImageDraw.Draw(im)
    for i in houses:
        x2 = (int(i[0]) + int(i[2])) / int(size[0])
        y2 = (int(i[1]) + int(i[2])) / int(size[1])
        x1 = (int(i[0]) - int(i[2])) / int(size[0])
        y1 = (int(i[1]) - int(i[2])) / int(size[1])
        coord=(int(y1 * size[0]), int(x1 * size[1]),(int(y2 * size[0])), int(x2 * size[1]))
        print(coord)
        t=(10,10,30,30)
        print(type(t), type(coord))
        drawer.ellipse(coord, fill=color)
        im.save('out.png')
 
fleur((200, 200), '#FF0000', (30, 100, 10), (180, 100, 20), (100, 20, 30))
поменял местами координаты
1
29 / 24 / 5
Регистрация: 15.10.2019
Сообщений: 268
07.03.2020, 13:32  [ТС]
u235, спасибо, домой прийду и посмотрю

Добавлено через 53 минуты
u235, да, спасибо, работает(там только x и y местами поменял). Осталось только проблема с цветами кругов, по условию нужно сделать через формулу. Есть идеи?

Добавлено через 4 минуты
сделал вот, правда я думал, что круги будут разных цветов, ведь радиус меняется

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from PIL import Image, ImageDraw
 
 
def fleur(size, bg_color, *houses):
    color = '#FF00FF'
    im = Image.new('RGB', size, color=bg_color)
    drawer = ImageDraw.Draw(im)
    for i in houses:
        a = int(i[2])
        color = '#aaa'
        x2 = (int(i[0]) + int(i[2])) / int(size[0])
        y2 = (int(i[1]) + int(i[2])) / int(size[1])
        x1 = (int(i[0]) - int(i[2])) / int(size[0])
        y1 = (int(i[1]) - int(i[2])) / int(size[1])
        coord = (int(x1 * size[1]), int(y1 * size[0]), (int(x2 * size[1])), int(y2 * size[0]))
        print(coord)
        t = (10, 10, 30, 30)
        print(type(t), type(coord))
        drawer.ellipse(coord, fill=color)
        im.save('out.png')
 
 
fleur((200, 200), '#FF0000', (30, 100, 10), (180, 100, 20), (100, 20, 30))
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
07.03.2020, 19:12
billy121, 16-18 строки удалите, это я для отладки делал...
какая именно формула для цветов кругов?
А, все, прочитал условие внимательнее..
0
29 / 24 / 5
Регистрация: 15.10.2019
Сообщений: 268
07.03.2020, 19:15  [ТС]
u235, про 16-18 строки я понял, что для проверки.
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
07.03.2020, 19:22
Лучший ответ Сообщение было отмечено billy121 как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from PIL import Image, ImageDraw
 
 
def fleur(size, bg_color, *houses):
    color = '#FF00FF'
    im = Image.new('RGB', size, color=bg_color)
    drawer = ImageDraw.Draw(im)
    for i in houses:
        a = int(i[2])
        gray=(a * 100) % 256
        color = (gray, gray, gray)
        x2 = (int(i[0]) + int(i[2])) / int(size[0])
        y2 = (int(i[1]) + int(i[2])) / int(size[1])
        x1 = (int(i[0]) - int(i[2])) / int(size[0])
        y1 = (int(i[1]) - int(i[2])) / int(size[1])
        coord = (int(x1 * size[1]), int(y1 * size[0]), (int(x2 * size[1])), int(y2 * size[0]))
        drawer.ellipse(coord, fill=color)
        im.save('out.png')
 
 
fleur((200, 200), '#FF0000', (30, 100, 11), (180, 100, 20), (100, 20, 30))
1
29 / 24 / 5
Регистрация: 15.10.2019
Сообщений: 268
07.03.2020, 19:25  [ТС]
u235, блин, спасибо от души
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.03.2020, 19:25
Помогаю со студенческими работами здесь

Проблема с созданием файла
Помогите, пожалуйста, разобраться. Только учусь, поэтому ошибки могут быть глупыми. Объясните, что делаю не так. Проблема состоит в том,...

Проблема с созданием кнопки
Доброго времени сутокДобрый день, возникла загвоздка, надо сделать кнопку (настройки), которая бы открывала новое окно и в нем был список...

Проблема c созданием окна
При нажатии на одну из кнопок должно создаваться ещё одно окно, но ничего не происходит. Не могу найти, в чём проблема. Вот мой код: ...

Проблема с созданием бота ВК
Я взял код отсюда: https://fscdev.github.io/vkwave/getting_started/echo/ from vkwave.bots import SimpleLongPollBot, SimpleBotEvent ...

Проблема с созданием условия
Я не могу создать условие на python Не могли бы вы помочь создать условие Вот так оно должно выглядеть input = тому, что сказал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru