Нужна помощь коллективного разума на тему: как залить часть произвольной замкнутой геометрической фигуры?
Usecase:
.Fill()
куска фигурыЗачем это нужно: пользователю скажем, что это вид сбоку на какие-то ёмкости. Ёмкости могут быть не только прямоугольные/круглые, но и сложного сечения, отсюда и проблема.
Получить площадь замкнутого многоугольника я могу, как и вычислить условные 25% от неё. А вот дальше-то что? Примем, что у нас многоугольник выпуклый, с одним "дном". Как на картинке.
Есть мысль идти тупо по точкам внутри контура, снизу вверх и влево-вправо, пока количество залитых пикселей не будет равно 25% от площади, но на большом поле это займёт кучу времени. А Paint()
вызывается довольно часто.
Ниже пример, как если-бы пользователь нарисовал фигуру и ввёл 25% заполненности (в реале заливка будет снизу вверх, я в Paint нарисовал некорректно, но смысл не меняется)
Работаю в C# WinForms .net 3.5
Общего алгоритма не знаю, но знаю, что для выпуклых фигур вполне достаточно обойти все строки изображения по порядку снизу вверх и заливать в цикле горизонтальные строчки.
Для каждой строчки заливаем цветом "серёдку" между двумя точками фигуры - крайней слева и крайней справа):
Поскольку мы договорились, что фигура выпуклая, то точек будет либо две, либо (в вырожденном случае) одна.
В процессе считаем нужный процентаж от высоты фигуры, чтобы остановиться вовремя.
Если фигура начинается не с самого низа картинки (а это вероятно так будет), то сначала нужно досчитать до первой горизонтальной линии
(как вариант это может быть точка):
И только после этого начинать заливать.
Есть мысль идти тупо по точкам внутри контура ... но на большом поле это займёт кучу времени.
Чертите не точками, а сразу горизонтальными линиями.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Я пытаюсь разместить историю в Инстаграмм с компьютераИспользую Selenium + C# + geckodriver (Console Application)
На машине x64 Windows 7 установил MS VS 2019 Professional, вместе установил и "ASPNET
Пишу программу вывода графика работы врачей на телевизорГрафик работы сохраняю в БД