![](https://habrastorage.org/webt/uc/ll/2j/ucll2jjge0pdonppyijjju9a_pa.png)
Альтернативное решение
А ещё ему хотелось иметь формулу не параметрически заданную, а в полярных координатах.
В общем, он предложил мне подумать над альтернативным решением.
Моё решение (в полярных координатах) получилось таким:
в которой параметр от 0 до 1 задаёт степень «оквадрачивания», причём линейно — определяя точку пересечения (k,k) фигуры с диагональю. Это значит, что можно однозначно определить наш квадрокруг через 3 точки. И да, при мы имеем самый настоящий квадрат, с прямыми сторонами и острыми углами. Ну а круг, соответственно, получается при (косинус 45°). Варианты получаемых фигур отражены на КДПВ.
Вы также можете обратить внимание, что в этой формуле нет таких хитростей, как функции остатка от деления, взятия/отбрасывания знака и прочего — как это требуется для суперэллипса. Всё честно, только стандартные математические функции, с которыми не возникнет сложности при дифференцировании или интегрировании. Кстати про интегрирование — при желании, можно найти и площадь этих фигур (через эллиптические интегралы):
Развитие
Можно добавить больше вариативности полученным фигурам. Например, так:
Здесь у нас появился ещё один параметр z, позволяющий искажать фигуру не нарушая идеологию построения. С её помощью можно приблизить нашу фигуру к суперэллипсу (на графиках отображён жёлтым цветом). Например, при n=4 (k=0.266, z=0.1) совпадение почти идеальное:
![](https://habrastorage.org/webt/pw/-s/vf/pw-svftklss38bavwlf-k0rilxo.png)
при более высоких n разница уже более ощутима (n=5, k=0.6, z=0.48):
![](https://habrastorage.org/webt/ww/z9/ud/wwz9udjlhgqqbsmwd1tn-_bwbke.png)
n=10, k=0.942, z=1.02:
![](https://habrastorage.org/webt/i8/ng/n6/i8ngn6wxccaun-fuiyuunncx3z4.png)
И да, можно же пойти совсем радикальным способом! Такой дизайн иконок уж точно ни с чем не перепутаешь:
![](https://habrastorage.org/webt/jo/fg/dk/jofgdk4aq0bma7ci9os5elmvlac.png)
Ну и с анимацией тоже можно слегка пофантазировать:
![](https://habrastorage.org/webt/-6/ag/63/-6ag63egkfywn2-s8-coy7ip-2g.gif)
Заключение
Если некий дизайнер некоторой фирмы с (необязательно) фруктовым логотипом хочет получить уникальный дизайн, пусть и не отличающийся принципиально от уже существующих решений — возможно, стоит попробовать поискать
P.S. Исходники статьи здесь.
P.P.S. Через уравнение кривой в декартовых координатах первоначальная формула будет выглядеть как
zuborg
А как плавно изменяется радиус скругления в этих «настоящих» кругоквадратах? Какая разница с яблочными?
Refridgerator Автор
Зависит от того, как вы этот «радиус скругления» будете считать. Если брать касательные по пути, то при схожей форме кривых они тоже не особо будут отличаться (тут для n=5)
![](https://habrastorage.org/webt/5v/55/gz/5v55gzg6brokoc23hw8lao-xjoo.png)
zuborg
Я про эту картинку, собственно:
Изменение кривизны в углу сквирла имеет колоколоподобный характер, что выглядит вполне приятно для глаза.
Refridgerator Автор
Хотите посравнивать колоколоподобные кривые? Ну вот, например, посчитанные по этой формуле:
![](https://habrastorage.org/webt/4n/co/kl/4ncoklokhc0cfwcjs9tdbujwqoc.png)
zuborg
Форма очень похожа. Синяя линия от более близкой к кругу фигуры.
С задачей «закруглить углы квадрата, плавно наращивая кривизну» обе фигуры справляются вполне хорошо.
Отличия надо искать уже для производных кривизны, начиная с какой-то степени могут найтись разрывы…
Refridgerator Автор
Ни с какой степени производных тут не появятся разрывы. Разрывы появляются при полиномиальной кусочно-непрерывной интерполяции, поскольку полином конечной степени имеет конечное количество производных. Однако даже кусочно-непрерывную интерполяцию можно организовать так, что она не будет иметь разрывов ни в каких производных — только для этого потребуются не полиномы, а другие функции.
Zoolander
поверните на 45 градусов, получится 4-листный клевер!