Прямоугольник с круглыми углами: Отчаянный поиск квадрокруга / Хабр

Содержание

Отчаянный поиск квадрокруга / Хабр

Поиск таинственной математики, на которой основана фигура в iOS


Это история о том, как один инженер Figma искал идеальный ответ на программистскую задачу.



В знаменитом интервью 1972 года Чарльз Имз кратко ответил на несколько фундаментальных вопросов о природе дизайна. Отвечая на первый вопрос, он определил дизайн как «план компоновки элементов для достижения определённой цели».

Остальные ответы тоже очень лаконичны, вплоть до метафор. Но когда Имза спросили о роли ограничений дизайна, он остановился и выдал самый длинный и самый продуманный ответ за всё интервью: «Один из немногих эффективных ключей к проблеме дизайна — это способность дизайнера распознавать как можно больше ограничений; его готовность и энтузиазм к работе в этих ограничениях».

Хотя я не дизайнер по профессии — я разработчик Figma, веб-инструмента совместного проектирования — несложно заметить, что замечания Имза относятся и к моей работе. Вместо элементов UI я компоную выраженные в коде математические концепции для создания инструментов и функций. И ограничения времени, простоты, поддержки и даже эстетики играют похожую доминирующую роль в моей работе.


Один недавний проект особенно хорошо подчёркивает эти параллели. Мне поручили каким-то образом добавить в Figma поддержку фигуры Apple с причудливым названием «квадрокруг» (squircle). Я начал изучать тему.

Исследование превратилось в настоящую математическую Одиссею, полную фальстартов, скрытых проблем, возникающих ограничений, разведки, напряжения — и разрешения. Короче говоря, это была история, которую в какой-то степени переживает каждый дизайнер почти каждый день.

Чтобы доставить удовольствие подобным мне математическим вундеркиндам и показать весь процесс проектирования с использованием математики, далее описан каждый шаг: от первого квадрата до окончательного результата.


История началась задолго до того, как я основал Figma, а именно 10 июня 2013 года — в день выхода iOS 7. В новой ОС было некое едва заметное обновление: иконки приложений на главном экране стали более сочными, более органичными. Вместо квадрата с закруглёнными углами каждая иконка превратилась в квадрокруг (squircle, сочетание слов «квадрат/прямоугольник» и «круг»).

Вы спросите, какая разница? Если честно, то небольшая: за основу взят обычный прямоугольник со скруглёнными углами, но он немного обработан напильником в местах начала закруглений. Поэтому переход от прямой к изогнутой линии становится менее резким.

Если точно сформулировать на языке математики, то у квадрокруга непрерывная кривизна периметра, а у округлённого квадрата — нет. Это может показаться тривиальным, но подсознательно действительно оказывает большое влияние: квадрокруг не похож на обработанный квадрат; он воспринимается как отдельная правомочная сущность, как форма гладкого камушка на дне реки — единое и элементарное целое.


1.1. Сравнение округлого квадрата и квадрокруга: очевидно, разница невелика

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

Причина в непрерывности закруглений, которые специально рассчитаны дизайнерами. Неудивительно, что именно компания Apple, которая имеет уникальный опыт разработки одновременно и программного, и аппаратного обеспечения, в конечном итоге применила идеи промышленного проектирования в дизайне интерфейсов, сделав свои иконки похожими на физические вещи собственного производства.


Конечно, мы в Figma любим дизайнеров iOS и считаем, что у наших пользователей всегда под рукой должны быть нужные элементы платформы. Чтобы предоставить им доступ к этой новой форме при проектировании, нужно найти точное математическое описание. Тогда мы начнём выяснять, как встроить эту форму в наш инструмент.

К счастью, люди задаются таким вопросом с момента выхода iOS 7. Конечно, мы не первые, кто пошёл по этому пути! Исходная фундаментальная работа Марка Эдвардса содержала скриншот с указанием, что форма иконки представляет собой особое обобщение эллипса под названием суперэллипс. Следующая математическая формула описывает круги, эллипсы и суперэллипсы в зависимости от выбора a, b и n:


2.1. Формула суперэллипса

Скажем, если выбрать n = 2, a = 5 и b = 3, то получится нормальный эллипс с большими полуосями 5, ориентированными вдоль оси

x, и малыми полуосями 3, ориентированными вдоль y. Если оставить n = 2 и выбрать а = b = 1, то получится идеальная окружность единичного радиуса. Но если выбрать n больше двух, то получится суперэллипс — округлая эллиптическая форма, которая начинает сливаться с формой прямоугольника, в который она вписана, где углы становятся идеально прямыми, если n стремится к бесконечности. Изначально предполагалось, что Apple выбрала форму с n = 5. Если вы попробуете такую формулу, то увидите, что она действительно очень близка к той, что используется в iOS 7+.

Если бы истинное описание действительно было таковым, то мы могли бы просто применить некое разумное количество кривых Безье — а затем аккуратно интегрировать новую концепцию в Figma. Но к сожалению, тщательный последующий анализ показал, что формула суперэллипса не совсем подходит (хотя в наши дни истинные суперэллипсы

действительно используются в качестве других иконок). Фактически, для всех вариантов n в вышеприведённом уравнении есть малое, но систематическое несоответствие по сравнению с реальной формой иконки.

Это первый тупик в истории: у нас есть элегантное простое уравнение для чего-то очень похожего на квадрокруг iOS, но оно принципиально неверное. Но мы обязаны дать нашим пользователям верное уравнение.

Продвижение вперёд требует серьёзных усилий, и я снова рад собрать урожай, посеянный другими. Один исследователь Майк Свонсон из Juicy Bits выдвинул гипотезу, что углы квадрокруга построены на последовательности кривых Безье. Он применил генетический алгоритм для оптимизации сходства с официальной формой Apple. Полученные результаты соответствуют оригиналу, как доказано отличным прямым сравнением Манфреда Швинда, который изучил код iOS, непосредственно генерирующий иконки. Таким образом, у нас есть два разных подхода, дающих одинаковую структуру кривых Безье: квадрокруги iOS 7 взломаны и дважды проверены независимыми исследователями, и нам даже не нужно ничего вычислять!


Остаются две важные детали, мешающие нам клонировать форму непосредственно в Figma.

Во-первых, удивительный факт, что версия формулы iOS (по крайней мере, во время исследования) сделана с некоторыми причудами — углы не совсем симметричны, а с одной стороны есть крошечный прямой сегмент, который явно здесь не должен быть. Нам он не нужен, потому что усложняет и код, и тесты, го его легко удалить простым зеркалированием половины угла, где баг отсутствует.

Во-вторых, при выравнивании соотношения сторон реального прямоугольника из iOS форма иконки резко меняется от нужного нам квадрокруга до совершенно иной формы. Дизайнерам будет неприятен такой выверт, и он заставляет чётко определить, какие формы «должны» проявляться при определённых условиях.

Наиболее естественным и полезным поведением при выравнивании квадрокруга стало бы постепенное исчезновение сглаживания до тех пор, пока не останется места для перехода между круглой и прямой частями угла. Дальнейшее выравнивание должно уменьшить радиус закруглённой секции, что соответствует нынешнему поведению Figma. Формула квадрокруга Apple здесь мало нам помогает, потому что в ней закругление выполняется фиксированным образом: она не дает указаний, как приближаться или удаляться от старого прямоугольника с закруглёнными углами. Что нам действительно нужно, так это

параметризуемое скругление, где определённое значение параметра очень близко соответствует форме Apple.

В качестве дополнительного бонуса, если мы cможем параметризовать превращение прямоугольника c закруглёнными углами в квадрокруг, то вполне можем применить такой же процесс в других местах Figma, где используется закругление: звёзды, многоугольники и даже углы в произвольных векторных сетях, нарисованных от руки. Несмотря на сложность, это начинает выглядеть гораздо более законченной и ценной фичей, чем просто добавление квадрокруга iOS 7. Теперь мы даём дизайнерам бесконечное разнообразие новых форм для использования во многих ситуациях, и одна из них соответствует иконке квадрокруга, с которой всё и началось.

Требование, чтобы наша схема закругления квадрокруга плавно регулировалась, но при этом соответствовала форме iOS 7 в определённой удобной точке из диапазона регулировки — это первое возникшее ограничение в нашей истории, и его трудно удовлетворить. Для балерины аналогичной задачей стало бы спроектировать целый прыжок по одной фотографии в полёте, чтобы в определённый момент фаза прыжка соответствовала фотографии. Звучит чертовски тяжело. Так может всё-таки понадобится какой-то расчёт?


Прежде чем погрузиться в параметризацию квадрокругов, отступим на шаг и сдуем пыль с некоторых формальных инструментов, которые помогут нам проанализировать происходящее. Прежде всего надо определиться, как описывать квадрокруг. Раньше в случае суперэллипсов мы использовали уравнение с x и y, где все точки (x, y) на плоскости, удовлетворявшие условиям уравнения, выводили суперэллипс. Это элегантно в случае простого уравнения, но реальные квадрокруги — это лоскутное одеяло соединённых вместе кривых Безье, что ведёт к неуправляемому нагромождению уравнений.

С этим осложнением можно справиться, используя более явный подход: возьмём одну переменную t, ограничим её конечным интервалом и сопоставим каждое значение t в этом интервале с отдельной точкой на периметре квадрокруга (на самом деле кривые Безье почти всегда представлены таким образом). Если сконцентрироваться только на одном из углов, тем самым ограничивая наш анализ изогнутой линией с чётким началом и концом, то можно выбрать такое отображение между t и углом, чтобы t = 0 соответствовало началу линии, t = 1 соответствовало концу линии, а плавное изменение t от 0 до 1 плавно вычерчивало закруглённую часть угла. На математическом языке опишем наш угол кривой r(t), которая структурирована как


4.1. Биекция плоской кривой с [0,1]

где x(t) и y(t) являются отдельными функциями t для x и y компонентов r. Можем представить r(t) как своеобразную историю пути, скажем, вашей поездки на машине. Для каждого момента времени t между отправлением и прибытием вы можете оценить r(t) и получить положение вашего автомобиля на маршруте. Из пути r(t) можно вывести скорость v(t) и ускорение a(t):


4.2. Скорость и ускорение плоской кривой

Наконец, математическая кривизна, которая играет главную роль в нашей истории, в свою очередь может быть выражена в терминах скорости и ускорения:


4.3. Беззнаковая кривизна плоских кривых

Но что на самом деле означает эта формула? Хотя это может выглядеть немного усложнённой, у искривления простая геометрическая конструкция, первоначально из-за Коши:

  1. Центр кривизны C в любой точке P вдоль кривой лежит на пересечении линии нормали к кривой в P и другой линии нормали, взятой бесконечно близко к P. (В качестве примечания, окружность с центром в C, называется соприкасающейся окружностью (osculating circle) в P, от латинского глагола osculare, что означает «поцелуй». Разве это не замечательно?)
  2. Радиус кривизны R — это расстояние между С и P.
  3. Кривизна κ является обратной величиной к R.

Как показано выше, кривизна κ неотрицательна и не различается поворотами вправо или влево. Поскольку нам важно такое отличие, то мы формируем из κ знаковую кривизну k, назначая положительный знак, если кривая поворачивает вправо, и отрицательный знак, если влево. Эту концепцию тоже можно сравнить с вождением автомобиля: в любой точке t знаковая кривизна k(t) — это просто угол, на который поворачивается рулевое колесо в момент времени t, со знаком плюс для поворота вправо и минус для поворота влево.
С введением кривизны осталось уладить только несколько деталей. Во-первых, представим на мгновение два автомобиля, движущиеся по углу квадрокруга; один автомобиль резко ускоряется, а потом всё время тормозит, а другой равномерно газует до самого конца. Эти два разных способа вождения породят весьма разные истории пути, даже с одинаковой траекторией. Нас волнует только форма угла, а не способ её достижения, так как их привести к общему знаменателю? Здесь главное при пометке точек истории использовать не время, а совокупное пройденное расстояние, то есть длину дуги. То есть вместо вопроса «Где находилась машина через десять минут пути?» лучше отвечать на вопрос «Где находилась машина через десять миль от начала поездки?». Такой способ описания траектории фиксирует только геометрию и ничего более.

Если у нас есть некоторая история пути r(t), мы всегда можем извлечь длину дуги s как функцию времени t пути, проинтегрировав скорость следующим образом:


5.1. Интеграл длины дуги

Если мы можем инвертировать это отношение и найти t(s), то можем подставить её вместо t в нашей истории пути r(t), чтобы получить желанную параметризацию длины дуги r(s). Параметризация длины дуги для пути эквивалентна истории пути автомобиля, движущегося с единичной скоростью, поэтому неудивительно, что скорость v(s) всегда является единичным вектором, а ускорение a(s) всегда перпендикулярно скорости. Следовательно, в варианте с параметризацией по длине дуги описание кривизны упрощается только до величины ускорения.


5.2. Кривизна в варианте с параметризацией по длине дуги

И можно установить соответствующий правый или левый знак, чтобы сформировать подписанную кривизну k(s). Очевидно, бóльшая часть осложнений в более общем определении кривизны заключалась просто в негеометрическом содержании истории пути. В конце концов, кривизна — чисто геометрическая величина, поэтому очень приятно видеть, что она выглядит простой в геометрической параметризации.


Теперь о другой детали. Мы только что разобрались, как перейти от описания истории пути r(t) к описанию по параметру длины дуги r(s) и как извлечь из неё знаковую кривизну k(s). Но можем ли мы сделать обратное? Спроектировать профиль кривизны — и из него вывести родительскую кривую? Давайте ещё раз рассмотрим аналогию с автомобилем: предположим, что когда мы ехали на постоянной единичной скорости по всему маршруту, то фиксировали положение рулевого колеса непрерывно на протяжении всего пути. Если возьмём эти данные рулевого управления и потом передадим другому водителю, сможет ли он полностью восстановить маршрут, если правильно воспроизведёт позиции рулевого колеса и будет ехать точно на такой же скорости? Интуитивно у нас достаточно информации, чтобы восстановить родительскую кривую, но как это вычисление выглядит математически? Хотя немного шероховато, но такое возможно благодаря Эйлеру с помощью параметризации длины дуги. Если мы выберем такую систему координат, чтобы кривая начиналась в начале координат и изначально направлялась вдоль оси x, тогда x(s) и y(s) можно восстановить из k(s) следующим образом:


6.1. Восстановление кривой по её кривизне

Наконец, обратите внимание на аргумент синусной и косинусной функций: это интеграл знаковой кривизны. Обычно у тригонометрических функций в качестве аргументов указываются углы в радианах. Так и есть в нашем случае: интеграл от a до b подписанный кривизны — это курс в b минус курс в a. Таким образом, если взять прямоугольник и закруглить угол как угодно, измерить кривизну закруглённой части и интегрировать результат, в итоге мы всегда получим π/2.


Разобравшись с деталями, применим эти аналитические инструменты к некоторым реальным формам. Начнём с закруглённого угла прямоугольника, с радиусом угла равным единице. Построим сначала сам угол, а затем кривизну как функцию длины дуги:


7.1. Анализ кривизны закруглённого прямоугольника

Теперь повторим процесс для углов реальных квадрокругов Apple — и увидим, что их кривизна сильно отличается:


7.2. Анализ кривизны квадрокруга iOS 7

Кривизна выглядит довольно зубчатой, но это необязательно плохо. Как мы увидим позже, можно найти компромисс между плавным графиком кривизны и небольшим количеством кривых Безье, а в угле iOS их только три. Как правило, дизайнеры готовы пожертвовать математически идеальным профилем кривизны ради уменьшения количества кривых Безье. Отбросив детали, на правом графике проявляется общая картина: кривизна поднимается вверх, выравнивается посередине, а затем возвращается вниз.


Бинго! В этом последнем наблюдении лежит ключ к тому, как параметризовать сглаживание угла нашего квадрокруга. При нулевом сглаживании профиль кривизны будет как у закруглённого прямоугольника: в форме столешницы. По мере постепенного усиления сглаживания высота столешницы остаётся неизменной, но её края превращаются в крутые наклоны, образуя профиль равнобедренной трапеции (конечно, по-прежнему с общим углом π/2). Когда сглаживание приближается к максимуму, плоская часть трапеции исчезает — и мы получаем широкий равнобедренный треугольник, высота которого соответствует высоте первоначальной столешницы.


8.1. Профили кривизны для различных значений параметра сглаживания

Попробуем выразить этот набросок профиля кривизны в математических терминах, используя ξ как параметр сглаживания, который изменяется от нуля до единицы. Чтобы предусмотреть использование с другими формами, где нет прямых углов, введём также угол поворота θ, который в случае прямоугольника равен π/2. Соединив их вместе, можно выразить кусочно-непрерывную функцию в трёх частях: одна для подъёма кривизны, вторая для плоской вершины и третья для спуска:


8.2. Параметризация профиля кривизны квадрокруга

Обратите внимание, что первая и третья части (подъём и спуск) исчезают при приближении ξ к нулю, а средняя часть (плоская вершина) исчезает при приближении ξ к единице. Выше мы показали, как перейти от профиля кривизны к родительской кривой. Попробуем сделать это на первом уравнении, описывающем линию, кривизна которой начинается с нуля и неуклонно увеличивается. Сначала сделаем простой внутренний интеграл:


8.2. Первый интеграл из 6.1 применительно к уравнениям 8.2

Пока что всё отлично! Можно продолжить и сформировать следующую пару интегралов:


8.2. Второй интеграл из 6.1 применительно к уравнениям 8.2 (интеграл Френеля)

Увы, здесь мы попали в затор, потому что эти интегралы не такие простые. Если вы слышали о связи между тригонометрическими функциями и экспонентами, то можете догадаться, что эти интегралы связаны с функцией ошибки, которую нельзя выразить элементарными функциями. То же самое относится и к этим интегралам. Так что будем делать? Решение выходит за рамки этой статьи (см. этот пост на Math StackExchange для подсказки), но в данном случае можно заменить синус и косинус в степенных рядах, а затем поменять сумму и интеграл:


8.4. Разложение в ряд интегралов Френеля

Степенные ряды кажутся почти непроходимыми, так что давайте сделаем ещё шаг и явно выпишем первые несколько элементов в каждом ряду, перемножив всё для упрощения. Это даёт следующие несколько элементов для x и y формы:


8.5. Элементы низкого порядка (n < 3) из 8.3


Вот это уже конкретный результат! Мы можем реально начертить график этой пары уравнений (при разумном выборе ξ, θ и R) — и получить контур как функцию от s. Если бы у нас было произвольное количество элементов и возможность вычислить суммы, то мы бы увидели, что по мере возрастания s кривая закручивается в спираль, хотя это происходит далеко от интересующей нас области.

Повторяя тезис из начала этой статьи, мы опять не первые, кто занимается такими исследованиями. По причине линейной кривизны, которая очень полезна на практике, многие натыкались на эту кривую в прошлом. Она известна как спираль Эйлера, спираль Корню или клотоида — и широко используется при проектировании треков, в том числе автомобильных дорог и американских горок.


9.1. Клотоида до s = 5

Если использовать разложение только до n < 10, как указано в 8.5, то у нас наконец-то есть всё необходимое, чтобы произвести первый артефакт. Этот ряд представляет собой восходящую (первую) часть уравнения 8.2, но его легко адаптировать к нисходящей (третьей) части, и мы свяжем эти части между собой дуговым сегментом для плоской (второй) части. Такой метод обеспечивает математически идеальный угол квадрокруга, который точно соответствует конструкции кривизны, впервые представленной в уравнениях 8.2. Вот анализ кривизны, проведённый на клотоиде для угла квадрокруга с ξ = 0,4:


9.2. Угол квадрокруга при ξ = 0,4 при использовании клотоид девятого порядка и дуг окружностей

Хотя приятно получить такую элегантную форму, но следует понимать, что это лишь идеальная версия. Такая точная форма не подойдёт по нескольким причинам. Из них главная причина в том, что центр кривизны круговой части перемещается как функция параметра сглаживания ξ  — в идеале он был бы зафиксирован.

Ещё важнее, что степень длины дуги s в определённых нами условиях может достигать девяти. В Figma все непрерывные кривые должны быть представимы кубическими кривыми Безье (частные случаи которых — квадратичные кривые Безье и линии). Это ограничивает нас сохранением только кубических и членов нижнего порядка. То есть каждый из приведённых выше рядов для x(s) и y(s) будет усечён до одного элемента. Трудно надеяться, что после такого усечения сохранятся необходимые свойства фигуры.

К сожалению, недостаточно отбросить члены более высокого порядка, ибо полученная конструкция очень плохо работает при больших значениях ξ. На рисунке внизу показан результат для ξ = 0,9:


9.3. Угол квадрокруга при ξ = 0,9 с использованием клотоид третьего порядка и дуг окружностей

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


Сделаем шаг назад, снова рассмотрим наши ограничения — и попытаемся извлечь всю пользу из предыдущих усилий, прежде чем отправиться в новом направлении.

Во-первых, мы знаем, что у идеальной клотоидной конструкции именно тот профиль кривизны, который нам нужен, но центр кривизны центральной круговой секции меняет своё местоположение как функция от параметра сглаживания ξ. Это нежелательно, потому что в UI для cкругления прямоугольника указана точка прямо в центре кривизны. Пользователь устанавливает радиус угла, перетаскивая её. Будет немного странно, если эта точка начнёт перемещаться по мере изменения сглаживания. Кроме того, в форме iOS центральная секция находится там, где была бы в случае простого скруглённого прямоугольника, что ещё раз указывает на полную независимость местоположения центра от ξ. Таким образом, мы можем сохранить ту же основную цель проектирования кривизны и добавить ограничение, что круговая секция сохраняет фиксированный центр кривизны при изменении ξ.

Во-вторых, мы знаем, что дизайнерам не нужен слишком сложный инструмент создания углов квадрокруга. В фигуре Apple (после удаления странной крошечной прямой части) только одна кривая Безье, соединяющая круговую секцию с входящий частью кривой — может, и мы так сделаем?

В-третьих, у нас немного непонятные технические ограничения. Они не очевидны с самого начала, но становятся серьёзной проблемой реализации. Чтобы понять их, рассмотрим квадрат 100×100 пикселей, со стандартным скруглением для радиуса угла 20px. Это значит что на каждой стороне квадрата остаётся по 60px прямого отрезка. Если мы сплющим квадрат в прямоугольник 80×100px, то прямой участок короткой стороны будет только 40px. Что происходит, когда мы сужаем прямоугольник так сильно, что у нас заканчивается прямой фрагмент? Или если продолжаем его сужать дальше в прямоугольник, скажем, 20×100px? В данный момент Figma определяет максимально применимое значение скругления углов — и использует его. Таким образом, в прямоугольнике 20×100px будет скругление с радиусом 10px.

Если для сглаживания углов с радиусом R и параметром ξ задействуется p пикселей, то функция p(R,ξ) должна быть обратима в ξ(R,p).

Любой процесс сглаживания в квадрокруге съест ещё больше пикселей прямой стороны, чем простое скругление. Представьте тот же квадрат 100×100px, сделайте скругление 20px, а затем примените некоторую процедуру сглаживания, которая удаляет ещё по 12 пикселей с прямых сторон. Это оставляет нам всего 36px в прямой секции. Что происходит при сужении прямоугольника до 60×100px? По аналогии кажется почти очевидным, что следует уменьшить масштаб сглаживания до такого уровня, чтобы оно не превышало размер прямой секции. Но как вычислить величину ξ, удовлетворяющую определённому количеству пикселей? Вычисление должно быть быстрым, иначе мы не сможем реализовать данную функцию.

Опять же, проблема очень точно описывается математически: если сглаживание углов с радиусом R и параметром ξ потребляет p пикселей, то функция p(R,ξ) должна быть обратима в ξ(R,p). Это несколько скрытое ограничение, которое тоже исключает решение рядом клотоид высокого порядка.

Наконец, у нас есть ограничение юзабилити: изменение сглаживания должно быть хоть как-то заметно на фигуре. Если мы дёргаем параметр сглаживания ξ туда и обратно между нулем и единицей, то хотелось бы видеть разницу! Представьте, что вся наша работа приводит лишь к едва заметным изменениям — это неприемлемо. Таково принципиально требование полезности, и по сути это самое главное ограничение.


Давайте попробуем самый простой подход, какой только можем придумать, при этом соответствующий перечисленным ограничениям. Просто возьмём одну параметризованную кривую Безье, которая берёт круговую часть и связывает её с прямой стороной. На рисунке ниже показан подходящий тип кривой Безье.


11.1. Контрольные точки кубической кривой Безье для восходящей части угла квадрокруга

Некоторые свойства этой кривой Безье заслуживают дальнейшего объяснения. Во-первых, контрольные точки 1, 2 и 3 выстраиваются в линию. Это гарантирует нулевую кривизну в точке 1, которая соединяется с прямой частью квадрокруга. Вообще, если определить систему координат и связать точку 1 с P1, точку 2 с P2 и т.д., кривизна в точке 1 задаётся следующей формулой:


11.2. Неупрощённая кривизна в точке 1 на рис. 11.1

Хорошо видно сокращение дроби, если точки 1-3 выстроены в линию. Ту же формулу применяем к точке 4, указывая координаты в обратном порядке:


11.3. Упрощённая кривизна в точке 4 на рис. 11.1

В идеале, кривизна получится такой же, как в круговой секции, или 1/R, что приводит к ещё одному ограничению. Наконец, значения c и d зафиксированы из-за того факта, что конец этой кривой должен совпадать с круговой частью и затрагивать места соприкосновения. Значит, вышеуказанное ограничение кривизны просто даёт нам значение b:


11.4. Решение для b на рис. 11.1, обеспечивающее непрерывность кривизны

Если нам важно сохранить начальное линейное увеличение кривизны (которое является идеальным решением с клотоидами в точке 1), можно установить a равное b, что фиксирует все точки на кривой Безье и даёт нам потенциальное решение. Используя эти наблюдения, мы создаём простой квадрокруг на кривых Безье, используя сглаживание ξ = 0,6.

Выглядит неплохо, и здесь используется много подсказок от первоначального расчёта клотоид. К сожалению, разброс по всему диапазону ξ от 0 до 1 практически не заметен на глаз. Ниже показаны углы на двух уровнях масштабирования, с кривыми для ξ = 0,1, 0,3, 0,5, 0,7 и 0,9 разными цветами:

Несмотря на хорошие математические свойства, эффект едва заметен. Конечно, такой вариант ближе к реальному продукту, чем кривая, полученная ранее сокращением ряда клотоид. Если бы только настроить формулу для большей вариативности!


Можно отойти ещё на шажок и поразмыслить, как действовать дальше. Напомним, нам нужна обратимая связь между пикселями, которые используются при сглаживании, и параметром сглаживания ξ. Сначала можно сосредоточиться на этом преобразовании и сделать его максимально простым. Тогда посмотрим, что получится, когда мы попытаемся сделать из него параметризацию квадрокругов.

Мы уже кое-что знаем о том, как используются пиксели в простом скруглении углов. Не хочу упоминать необходимую тригонометрию, но угол раскрыва θ, скруглённый с радиусом R, задействует q пикселей от вершины угла, причём q задаётся следующим образом:


12.1. Длина сегмента на скругление

Что если мы выберем p(R,ξ) на основе q самым простым способом, например:


12.2. Длина сегмента на скругление и сглаживание

Это означает, что при максимальном параметре сглаживания будет использоваться та же длина сегмента, которую мы использовали при обычном округлении. Такой выбор зафиксирует количество a + b на рисунке выше. Напомним, что при любых обстоятельствах c и d прочно зафиксированы, поэтому дополнительная фиксация a + b означает, что нам осталось принять одно последнее решение: насколько велико a по отношению к b? Опять же, если сделать самый простой выбор, а именно a = b, то мы закончим с определением параметризации кривой Безье, углы и кривизны которой показаны ниже:


12.3. Форма угла и профиль кривизны для схемы простого сглаживания

Такое визуальное разнообразие уже выглядит многообещающе! Кривые выглядят привлекательно и цельно. Но профиль кривизны грубоват. Вот если бы немного сгладить пики, тогда получится серьёзный кандидат на финальный релиз. Несмотря на слабый профиль, даже в этом простом семействе форм есть экземпляр, очень похожий на версию квадрокруга от Apple. Он почти достаточно хорош, чтобы с чистой совестью выкатить его для наших пользователей.

Теперь перейдём к профилю кривизны, нашей последней нерешённой проблеме. Вместо того, чтобы равномерно разделить разницу между a и b, как мы это делали выше, почему бы не выделить две трети интервала a, а остальное b? Это помешает слишком быстрому увеличению кривизны, уменьшив длинные хвосты на профиле кривизны и обрезав пики. Такое изменение приводит к следующим формам:


12.4. Форма угла и профиль кривизны для улучшенной схемы простого сглаживания

Профили кривизны значительно улучшились, а визуальное разнообразие по-прежнему достаточно для выпуска реального продукта. Параметр сглаживания ξ = 0,6 почти идеально совпадает с формой iOS, а хороший вид кривых сохраняется несмотря на потрясающую простоту их генерации. Так что пора задать вопрос: что мешает выпустить это в релиз? Ничего.


По итогу полезно поразмыслить над самим процессом. В этой истории неоднократно подтверждалось одно и то же — сила и эффективность простейшего возможного подхода. В худшем случае мы получим базу для сравнения, если он не сработает. Его серьёзная оценка поможет определить самое важное, что следует учесть при доработке подхода и дальнейшем продвижении. А в лучшем случае, как у нас, простейший подход уже даёт достаточно хороший результат!

В конце концов, хочется поразмышлять о разнице между хорошим и совершенным продуктом. Я немного смущён, что не придумал профиль кривизны получше. Уверен, что можно было выделить больше времени, ведь осталось много вариантов для исследования. С интеллектуальной точки зрения немного неприятно, что мы получили такую красивую серию клотоид, но не смогли использовать её в окончательной версии. Но есть и более важный вывод: ограничения времени при работе в небольшой компании очень реальны — а дизайн, который их нарушает, нельзя считать хорошим.

Создаем закруглённые уголки с помощью CSS 3 / Хабр



Одно из наиболее ожидаемых свойств CSS3, несомненно, свойство border-radius. С помощью свойства border-radius можно создавать, такие популярные в последнее время, прямоугольники с закругленными углами, исключительно средствами CSS, не используя никаких изображений.
Кроссбраузерная совместимость.

К сожалению, CSS3 еще не поддерживается всеми браузерами. Свойство border-radius поддерживается Firefox (начиная с версии 1.0), Safari (с версии 3.1) и Chrome (с самой первой версии), но оно не поддерживается Internet Explorer и Opera (будет реализовано в Opera 10).

Так как CSS3 еще не является стандартом, Вы должны добавлять префикс для свойства border-radius чтобы оно работало в браузерах, которые его поддерживают. Если Вы хотите, чтобы оно работало в Firefox необходимо написать в стилях -moz-border-radius, для Safari/Chrome это свойство будет иметь такой вид — -webkit-border-radius.

Имейте ввиду, что, хотя Firefox, Сафари и Хром поддерживают это свойство, они реализуют его немного различными методами. Я сначала покажу Вам, как оно реализовано Firefox и затем объясню различия в Safari и Chrome.

Для начала создадим простой блок, для которого мы и будем применять свойство border-radius.
<body>
<div></div>
</body>

В CSS зададим для него высоту, ширину и цвет фона:
#box {
width:590px;
height:100px;
background-color:#6B86A6; }

Добавляем свойство border-radius:

Свойство border-radius объявляется подобно свойствам margin и padding. Вы можете использовать как краткую запись этого свойства для всех четырёх углов прямоугольника, так и отдельно для каждого угла. При краткой записи указывается одно значение для каждого угла:
#box {
-moz-border-radius: 20px;
}

Теперь все четыре угла будут иметь радиус 20px:

Вы также можете указать два значения, первое из которых будет определять радиус для верхнего левого и нижнего правого угла, а второе — для верхнего правого и нижнего левого:
#box {
-moz-border-radius:20px 40px;
}

Если Вы указываете три или четыре значения, они будут применяться в следующем порядке — верхний левый угол, верхний правый угол, нижний правый угол и нижний левый угол.
#box {
-moz-border-radius:10px 20px 30px 40px;
}

Объявляем свойство border-radius для каждого угла

Если вы хотите использовать это свойство только для одного угла, то достаточно добавить соответствующее окончание к свойству:
  • moz-border-radius-topleft для верхнего левого угла;
  • moz-border-radius-topright для верхнего правго угла;
  • moz-border-radius-bottomright для нижнего правого угла;
  • moz-border-radius-bottomleft для нижнего левого угла;


Горизонтальный и вертикальный радиус

Это свойство можно также использовать для создания углов в виде четверти эллипса. Для этого необходимо добавить второе значение для нужного угла:
#box {
-moz-border-radius-topleft: 30px 15px;
}

Как Вы можете видеть на картинке верхний левый угол имеет немного «скошенный» вид. Это потому что эти два значения определяют горизонтальный и вертикальный радиус соответственно. Когда используется одно значение браузер интерпретирует его как для горизонтального, так и для вертикального радиуса.

При краткой записи этого свойства значения для горизонтального и вертикального радиуса разделяются слэшем:
#box {
-moz-border-radius: 30px / 15px;
}
#box {
-moz-border-radius: 10px 20px 30px 40px / 5px 10px 15px 20px;
}


Использование свойства border-radius в Safari и Chrome.

Safari и Chrome используют немного другой синтаксис, основным отличием является использование префикса -webkit, вместо -moz:
  • -webkit-border-top-left-radius для верхнего левого угла;
  • -webkit-border-top-right-radius для верхнего правого угла;
  • -webkit-border-bottom-right-radius для нижнего правого угла;
  • -webkit-border-bottom-left-radius для нижнего левого угла;

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

Этот код не будет работать в Safari и Chrome:
#box {
-webkit-border-radius: 10px 20px 30px 40px;
}

Правильный код будет выглядеть так:
#box {
-webkit-border-top-left-radius: 10px;
-webkit-border-top-right-radius: 20px;
-webkit-border-bottom-right-radius: 30px;
-webkit-border-bottom-left-radius: 40px;
}

Горизонтальный и вертикальный радиус в Safari и Chrome.

В Safari и Chrome можно также указывать горизонтальный и вертикальный радиус:
#box {
-webkit-border-top-left-radius: 30px 15px;
}

При краткой записи можно указывать горизонтальный и вертикальный радиус для всех углов прямоугольника только если эти значения одинаковые для каждого угла. Также не требуется использование слэша:
#box {
-webkit-border-radius: 30px 15px;
}

Примеры.

Острый край не радует глаз, или почему мы предпочитаем закруглённые углы

Дизайнеры сегодня используют закругленные углы настолько часто, что они уже стали стандартом нежели тенденцией дизайна. Однако закругленные углы встречаются не только в пользовательских интерфейсах, но и в промышленном дизайне. Так что же такого в закругленных углах и что делает их такими популярными? На самом деле все очень просто — они привлекательны. «И все ?» — спросите вы. Нет. Все куда глубже.

Закругленный угол не напрягает

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

Некоторые эксперты говорят, что прямоугольники с закругленными углами легче воспринимаются глазом, чем прямоугольники с острыми краями, потому что они требуют меньше когнитивных усилий для визуальной обработки жёлтым пятном (Жёлтое пятно — место наибольшей остроты зрения в сетчатке глаза, а так же является местом обработки округлых объектов).

Следовательно обработка острых краев вовлекает большее количество нейронов в мозгу человека . Таким образом, прямоугольники с закругленными углами легче воспринимаются, потому что они больше похожи на круг(для нашего мозга) чем обычный прямоугольник.

Научные исследования, проведенные Неврологическим институтом Барроу, показали, что «заментная выраженность угла изменяется линейно и зависит от угла поворота. Тем самым острые углы являются более выраженными и заметными». Другими словами, чем острее угол, тем «ярче» он выглядит. А как мы знаем чем ярче объект, тем труднее на него смотреть. Сравните сами.

Острый угол наш враг с детства

И это правда. Вспомните себя в детстве и свое первое близкое знакомство с острым предметом. Было больно, да? Вот почему, когда ребенок играет с мячом, большинство родителей не боятся за его безопасность, до момента пока он не вышел с мячом на дорогу.

Но если бы ребенок играл

Apple запатентовала «прямоугольник с закругленными углами»

Бюро по патентам и товарным знакам США закрепило за корпорацией Apple права на долгожданный патент, в котором описывается электронное устройство прямоугольной формы с закругленными углами. Заявка на патент «Portable display device» (D670,286) была подана в конце ноября прошлого года, однако утверждена она была только на этой неделе.


Стоит отметить, что в отличие от более ранних патентов Apple, в тексте данного документа отсутствуют какие-либо технические детали устройства. Кроме того, все части, обозначенные на рисунке прерывистыми линиями, не относятся к патентуемому дизайну. Из этого следует, что единственной сплошной линией на иллюстрациях является прямоугольник с закругленными углами, который обозначает общие контуры устройства.

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

Напомним, что на прошлой неделе патентное бюро США утвердило патент Apple на использование слова «Lion» в названии компьютерных операционных систем и инструментов для разработки программного обеспечения.

источник





▢ — Белый квадрат с закругленными углами: U+25A2

Описание символа

Белый квадрат с закругленными углами. Геометрические фигуры.

Символ «Белый квадрат с закругленными углами» был утвержден как часть Юникода версии 1.1 в 1993 г.

Свойства

Версия1.1
БлокГеометрические фигуры
Тип парной зеркальной скобки (bidi)Нет
Композиционное исключениеНет
Изменение регистра25A2
Простое изменение регистра25A2

Кодировка

Кодировкаhexdec (bytes)decbinary
UTF-8E2 96 A2226 150 1621484969811100010 10010110 10100010
UTF-16BE25 A237 162963400100101 10100010
UTF-16LEA2 25162 374150910100010 00100101
UTF-32BE00 00 25 A20 0 37 162963400000000 00000000 00100101 10100010
UTF-32LEA2 25 00 00162 37 0 0272033382410100010 00100101 00000000 00000000

Наборы с этим символом:

прямоугольник со скруглёнными углами — со всех языков на русский

  • 1 rounded rectangle

    English-Russian electronics dictionary > rounded rectangle

  • 2 rounded rectangle

    б) инструмент для рисования прямоугольников со скруглёнными углами в графических редакторах

    The New English-Russian Dictionary of Radio-electronics > rounded rectangle

  • 3 rounded rectangle

    Универсальный англо-русский словарь > rounded rectangle

  • 4 round corner beveling machine

    Универсальный англо-русский словарь > round corner beveling machine

  • 5 saignée avec congés

    сущ.

    маш. выемка со скруглёнными углами, вырез со скруглёнными углами

    Французско-русский универсальный словарь > saignée avec congés

  • 6 round corner beveling machine

    Англо-русский словарь по полиграфии и издательскому делу > round corner beveling machine

  • 7 round-cornered

    круглоугольный, со скруглёнными углами

    English-Russian scientific dictionary > round-cornered

  • 8 rounded rectangular hole

    Englsh-Russian aviation and space dictionary > rounded rectangular hole

  • 9 saignée

    f

    1. отрезка; подрезка, торцовка 2. выемка; вырез; прорезь

    Français-Russe dictionnaire de génie mécanique > saignée

  • 10 cutaway

    1. [ʹkʌtəweı] 2. [ʹkʌtəweı]

    1. срезанный, сходящий на нет

    2. данный в разрезе

    НБАРС > cutaway

  • 11 bullnose brick

    bullnose brick
    n

    Англо-русский строительный словарь. — М.: Русский Язык. С.Н.Корчемкина, С.К.Кашкина, С.В.Курбатова. 1995.

    Англо-русский словарь строительных терминов > bullnose brick

  • 12 double bullnose brick

    Англо-русский словарь технических терминов > double bullnose brick

  • 13 quarter octagon drill rod

    Англо-русский словарь нефтегазовой промышленности > quarter octagon drill rod

  • 14 2-face keystone, barrel face

    Универсальный англо-русский словарь > 2-face keystone, barrel face

  • 15 D-iron

    Универсальный англо-русский словарь > D-iron

  • 16 Rounded Rectangle Tool

    Универсальный англо-русский словарь > Rounded Rectangle Tool

  • 17 both faces keystone, barrel face

    Универсальный англо-русский словарь > both faces keystone, barrel face

  • 18 bullnose brick

    Универсальный англо-русский словарь > bullnose brick

  • 19 crystal faces are inclined to each other at characteristic angles

    Универсальный англо-русский словарь > crystal faces are inclined to each other at characteristic angles

  • 20 cutaway

    Универсальный англо-русский словарь > cutaway

См. также в других словарях:

  • Суперэллипс — при n = 1/2, a = b = 1 …   Википедия

  • Brick Game — Устройство «Brick game» с игрой «Тетрис» …   Википедия

  • Флаг Ленинского района (Московская область) — У этого термина существуют и другие значения, см. Флаг Ленинского района. Флаг Ленинского муниципального района Ленинский район Московская область Россия …   Википедия

  • Флаг Геленджика — Флаг муниципального образования город курорт Геленджик Геленджик Краснодарский край Россия …   Википедия

  • Бриллиант — прозрачный искусственно ограненный алмаз. Геологический словарь: в 2 х томах. М.: Недра. Под редакцией К. Н. Паффенгольца и др.. 1978 …   Геологическая энциклопедия

c ++ — Как нарисовать прямоугольник с закругленными углами (прямоугольник с закругленными углами) с помощью OpenCV?

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. работы Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании

Загрузка…

  1. Авторизоваться зарегистрироваться
.

Прямоугольник WPF — закруглить только верхние углы

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. работы Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. реклама Обратитесь к разработчикам и технологам со всего мира
.

dart — Как нарисовать пользовательскую рамку прямоугольника с закругленными углами (ShapeBorder) во Flutter?

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. работы Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании
,

изображений PNG со скругленными углами | Векторные и PSD файлы

  • rounded rectangle wooden panel hanging with rope, Wood, Sign, Hanging PNG and PSD

    прямоугольник с закругленными углами деревянная панель, подвешенная на веревке

    2000 * 2000

  • yellow rounded rectangle light effect border effect, Cool Light Effect, Brilliant Effect, Aperture Light Effect PNG and PSD/ourmid/pngtree-frame-colored-rounded-rectangle-border-design-gradient-border-texture-png-image_349818.jpg» alt=»frame colored rounded rectangle border design gradient border texture, Border Psd Source File, Decoration, Frame PNG and PSD»/>

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

    2000 * 2000

  • /ourmid/pngtree-rounded-rectangle-decorative-pattern-rounded-rectangle-decoration-simple-atmosphere-rounded-rectangle-png-image_384579.jpg» alt=»rounded rectangle decorative pattern rounded rectangle decoration simple atmosphere rounded rectangle decoration fresh and simple rounded rectangle decorative pattern, Rounded Rectangle, Rounded Rectangle Decorative Pattern, Rounded Rectangle Decoration PNG and Vector»/>

    прямоугольник с закругленными углами декоративный узор прямоугольник с закругленными углами украшение простая атмосфера прямоугольник с закругленными углами украшение свежий и простой прямоугольник с закругленными углами орнамент

    2876 * 2742

  • rounded rectangle with creative line decoration, Color, Lines, Blue PNG and PSD

    прямоугольник с закругленными углами и творческое оформление линий

    2000 * 2000

  • fluorescent edge rounded rectangle material, Gold, Fluorescent Border, Dark Fill PNG and PSD

    флуоресцентный край материал прямоугольника с закругленными углами

    2000 * 2000

  • phone address mobile and others icon for business card with rounded rectangle shape Template

    телефонный адрес мобильный и другие значок для визитной карточки с закругленным прямоугольником

    4167 * 4167

  • /ourmid/pngtree-blue-rounded-rectangle-sci-fi-technology-dialog-background-texture-material-fictionshadingbackgroundmaterialdialogirregularline-png-image_631429.jpg» alt=»blue rounded rectangle sci fi technology dialog background texture material, Blue, Round, Technology PNG and PSD»/>

    синий скругленный прямоугольник научно-фантастический технологический диалог фоновой текстуры материала

    2000 * 2000

  • set of game buttons and game ui kit for games or applications and, Game, Game Popup, Ui PNG and PSD

    набор игр но тонн и игровой пользовательский интерфейс для игр или приложений и

    5000 * 5000

  • rounded rectangle reference, Vector Png, Quotes, Quotation Marks PNG and Vector

    прямоугольник с закругленными углами

    1200 * 1200

  • green rounded rectangle clip, Green, Rounded PNG and PSD

    зеленый прямоугольник со скругленными углами клипса

    1200 * 1200

  • yellow rounded rectangle light effect border effect, Cool Light Effect, Brilliant Effect, Aperture Light Effect PNG and PSD/ourmid/pngtree-dark-green-technological-sense-simple-geometry-rounded-rectangle-border-png-image_350002.jpg» alt=»dark green technological sense simple geometry rounded rectangle border, Green Gradient, Modern Technology, Technological Border PNG and PSD»/>

    темно-зеленый технологический смысл простая геометрия рамка прямоугольника с закругленными углами

    2000 * 2000

  • rounded rectangle vector border, Border Vector, Fillet, Vector Border PNG and Vector

    вектор границы прямоугольника с закругленными углами

    2876 * 2742

  • ppt dialog box rounded rectangle decoration, Ppt Dialog Box Rounded Rectangle Decoration, Ppt, Dialog Box PNG and Vector

    диалоговое окно ppt украшение прямоугольника со скругленными углами

    8333 * 8333

  • с закругленными углами

    желтое сердце с закругленными углами прямоугольник границы

    2000 * 2000

  • colorful rounded rectangle background material, Colorful, Rounded Rectangle, Tetragonal PNG and PSD

    красочный скругленный прямоугольник фоновый материал

    2000 * 2000

  • golden luxury minimalistic rounded rectangle border, Wedding, Fashion, Frame PNG and PSD

    золотой роскошный минималистичный скругленный прямоугольник границы

    1200 * 1200

  • yellow rounded rectangle light effect border effect, Cool Light Effect, Brilliant Effect, Aperture Light Effect PNG and PSD

    эффект желтой границы эффект закругленного прямоугольника световой эффект

    1200 * 1200

  • rounded rectangle vector ppt, Rounded Rectangle, Ppt, Vector PNG and PSD

    прямоугольник с закругленными углами вектор ppt

    575 * 597

  • float colored floating rounded rectangle decoration gradient graphic, Geometry, Colorful, Float PNG and PSD

    плавающий цветной плавающий прямоугольник со скругленными углами украшения градиент графика

    2000 * 2000

  • ppt dialog rounded rectangle decoration ppt dialog fillet, Rectangular Decoration, Rounded Geometric Rectangle, Rectangular Dialog PNG and Vector

    ppt диалоговое окно с закругленными углами

  • 3
  • blue purple round rectangle border element material, Blue Purple, Round, Rectangle PNG and PSD

    синий фиолетовый круглый прямоугольник границы элемента материала

    2000 * 2000

  • rounded rectangle plant border, Geometric, Rounded Rectangle, Themed Border PNG and PSD

    скругленный прямоугольник граница завода

    2000 * 2000

  • ppt rounded rectangle geometric serial number decoration ppt rounded rectangle geometric serial number decoration, Ppt Decoration, Dialog Rounded Corners, Decoration PNG and Vector

    ppt скругленный прямоугольник геометрический серийный номер украшения ppt скругленный прямоугольник геометрический серийный номер украшения

    3705 * 2059

  • tech blue and purple technology rounded rectangle geometric border element, Technological Sense, Blue Purple, Rounded Rectangle PNG and PSD

    технический синий и фиолетовый технология скругленный прямоугольник геометрический элемент границы

    2000 * 2000

  • blue purple rounded rectangle, Blue-violet, Small Round PNG and PSD

    синий фиолетовый скругленный прямоугольник

    1682 * 1520

  • holographic rainbow brush round rectangle border, Brush, Frame, Black PNG and PSD

    круглая рамка

    круглая рамка

    радуга 1200 * 1200

  • white long round rectangle, White, Long Round, Rectangular Frame PNG and PSD

    белый длинный круглый прямоугольник

    1724 * 932

  • round rectangle, Round, Rectangular, Orange PNG and PSD

    круглый прямоугольник

    2000 * 1052

  • two color rounded rectangle border, White, Gradient, Rounded PNG and PSD

    двухцветный прямоугольник со скругленными углами

    006 2000 * 2000

    004 2000 * 2000

    пакет шаблонов значков пузырькового чата

    1200 * 1200

  • red rounded rectangle 21 clip art, Red, Red Circle, Circle PNG and PSD

    красный прямоугольник с закругленными углами 21 рисунок

    2000 * 2000

  • rounded rectangle vector icons, Vector, Icon, Rounded Vector PNG and PSD

    векторные иконки с закругленными углами

    342 * 233

  • rounded rectangle vector classification, Fillet, Vector Classification, Rounded Vector PNG and PSD

    классификация векторов с закругленными углами

    589 * 533

  • the font in the im proud of you round rectangle long purple Fonts

    шрифт в я горжусь вами круглый прямоугольник длинный фиолетовый

    1200 * 1200

  • light color round rectangle classification label, Light Color, Round, Rectangle PNG and PSD

    светлый круглый прямоугольник классификационная этикетка

    2000 * 2000

  • pink rounded rectangle material, Pink, Gradient, Creative PNG and PSD

    розовый скругленный прямоугольник материал

    2000 * 2000

  • irregular decorative pattern round rectangle triangle decorative pattern geometry geometric decorative pattern, Irregular Decorative Pattern, Geometry, Geometric Decorative Pattern PNG and Vector

    нестандартный декоративный р внешний вид круглый прямоугольник треугольник орнамент геометрия геометрический орнамент

    2481 * 3508

  • rounded rectangle frame with fresh tropical leaf, Leaf, Frame, Tropical PNG and PSD

    прямоугольник с закругленными углами рамка со свежими тропическими листьями

    5000 * 5000

  • rounded rectangle transparent button, Fillet, Rectangle, Transparent PNG and PSD

    прямоугольник с закругленными углами прозрачная кнопка

    2000 * 2000

  • знак вопроса в дизайне круглого прямоугольника

    2500 * 2500

  • illustration of tropical leaf with rounded rectangle frame, Leaf, Frame, Tropical PNG and PSD

    Иллюстрация тропического листа с рамкой из закругленного прямоугольника

    4000 * 4000

  • black and white rounded rectangle pattern emoticon pack collection, Black And White, Rounded Rectangle, Pattern PNG and Vector

    Коллекция смайликов с черно-белым узором из закругленных прямоугольников

    1024 * 1370

  • creative solid round rectangle border, Creative, C4d, Solid Round PNG and PSD

    Креативная сплошная рамка из круглого прямоугольника

    2000 * 2000

  • rounded rectangle built in arrow collection, Ai, Rounded Rectangle, Built-in Arrow Collection PNG and Vector

    Прямоугольник со скругленными углами, встроенный в набор стрелок

    1024 * 1370

  • black and white rounded rectangle, Overlay, Button, Button Clipart PNG and PSD
  • ,

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *