Альтернативное решение
А ещё ему хотелось иметь формулу не параметрически заданную, а в полярных координатах.
В общем, он предложил мне подумать над альтернативным решением.
Моё решение (в полярных координатах) получилось таким:
в которой параметр от 0 до 1 задаёт степень «оквадрачивания», причём линейно — определяя точку пересечения (k,k) фигуры с диагональю. Это значит, что можно однозначно определить наш квадрокруг через 3 точки. И да, при мы имеем самый настоящий квадрат, с прямыми сторонами и острыми углами. Ну а круг, соответственно, получается при (косинус 45°). Варианты получаемых фигур отражены на КДПВ.
Вы также можете обратить внимание, что в этой формуле нет таких хитростей, как функции остатка от деления, взятия/отбрасывания знака и прочего — как это требуется для суперэллипса. Всё честно, только стандартные математические функции, с которыми не возникнет сложности при дифференцировании или интегрировании. Кстати про интегрирование — при желании, можно найти и площадь этих фигур (через эллиптические интегралы):
Развитие
Можно добавить больше вариативности полученным фигурам. Например, так:
Здесь у нас появился ещё один параметр z, позволяющий искажать фигуру не нарушая идеологию построения. С её помощью можно приблизить нашу фигуру к суперэллипсу (на графиках отображён жёлтым цветом). Например, при n=4 (k=0.266, z=0.1) совпадение почти идеальное:
при более высоких n разница уже более ощутима (n=5, k=0.6, z=0.48):
n=10, k=0.942, z=1.02:
И да, можно же пойти совсем радикальным способом! Такой дизайн иконок уж точно ни с чем не перепутаешь:
Ну и с анимацией тоже можно слегка пофантазировать:
Заключение
Если некий дизайнер некоторой фирмы с (необязательно) фруктовым логотипом хочет получить уникальный дизайн, пусть и не отличающийся принципиально от уже существующих решений — возможно, стоит попробовать поискать
P.S. Исходники статьи здесь.
P.P.S. Через уравнение кривой в декартовых координатах первоначальная формула будет выглядеть как
zuborg
А как плавно изменяется радиус скругления в этих «настоящих» кругоквадратах? Какая разница с яблочными?
Refridgerator Автор
Зависит от того, как вы этот «радиус скругления» будете считать. Если брать касательные по пути, то при схожей форме кривых они тоже не особо будут отличаться (тут для n=5)
zuborg
Я про эту картинку, собственно:
Изменение кривизны в углу сквирла имеет колоколоподобный характер, что выглядит вполне приятно для глаза.
Refridgerator Автор
Хотите посравнивать колоколоподобные кривые? Ну вот, например, посчитанные по этой формуле:
zuborg
Форма очень похожа. Синяя линия от более близкой к кругу фигуры.
С задачей «закруглить углы квадрата, плавно наращивая кривизну» обе фигуры справляются вполне хорошо.
Отличия надо искать уже для производных кривизны, начиная с какой-то степени могут найтись разрывы…
Refridgerator Автор
Ни с какой степени производных тут не появятся разрывы. Разрывы появляются при полиномиальной кусочно-непрерывной интерполяции, поскольку полином конечной степени имеет конечное количество производных. Однако даже кусочно-непрерывную интерполяцию можно организовать так, что она не будет иметь разрывов ни в каких производных — только для этого потребуются не полиномы, а другие функции.
Zoolander
поверните на 45 градусов, получится 4-листный клевер!