• Как отрисовать векторный пузырь?

    Прежде чем отрисовать неравномерную окружность, нужно выработать для себя определение неравномерной окружности. Лично я о такой не слышал.

    Допустим, под неравномерной окружностью вы понимаете эллипс. У эллипса есть уравнение, которое определяет множество точек эллипса. С помощью этого уравнения можно определить, какая точка принадлежит эллипсу, а какая - нет (соответственно, какие точки закрашивать цветом контура, а какие - нет).

    На практике не всегда удобно проходить по всему множеству точек и проверять принадлежность каждой из них к эллипсу. Бывает, что проще перевести уравнения кривой в параметрический вид, и вычислять значения точек для некоторого набора дискретных значений параметра. Вот параметрическое уравнение эллипса:
    https://wikimedia.org/api/rest_v1/media/math/rende...
    в котором параметр t это угол между осью абсцисс и лучом, проходящим через центр координат и некоторую точку на эллипсе (при этом мы условимся, что центр эллипса совпадает с центром координат).

    Таким образом, меняя значения t с 0 до 2*PI, мы получим множество пар (x, y) - это как раз и есть те точки, которые следует закрасить.

    Попытавшись реализовать эту идею, вы вероятно, спросите - с каким шагом изменять параметр t. Это хороший вопрос и ответ на него зависит от вашей задачи и от того, насколько точно вы желаете нарисовать эллипс. Кроме того, если вы будете рисовать отдельные точки, как написано выше, то даже при относительно небольшом шаге у вас не будет получаться непрерывная линия. Уменьшая шаг параметра, вы рано или поздно добьетесь непрерывно выглядящей линии, однако это может значительно увеличить время отрисовки. В качестве простой оптимизации, можете вместо отдельных точек рисовать линии между двумя последовательными точками. Тогда, вместо эллипса вы, фактически, будете рисовать многоугольник. Однако, с увеличением числа точек (т.е. с уменьшением шага параметра t), он все более будет похож на эллипс.

    Это самое простое, с чего вы можете начать.
    Ответ написан
    3 комментария