Создайте конусообразную обводку

Некоторые программы рисования, такие как Manga Studio, включают кисти, которые сужаются к точке на концах мазка. У меня есть несколько идей о том, как это можно реализовать, но идеи, которые у меня есть, кажутся мне проблематичными/неэффективными... Я не смог найти никакой информации об этой задаче через Google, поэтому решил спросить здесь.

Кто-нибудь знает какие-либо алгоритмы создания конусообразного хода в AWT?

Мне нужно выяснить, как преобразовать координаты мыши, которые у меня уже есть, из событий мыши, например (x50,y50)-(x37,y20)-(x47,y10) в аргументы для Path2D.curveTo() или что-то в этом роде. природа. Как вы делаете математику для сужения хода? (Я не думаю, что есть какой-либо способ сделать это без достаточного количества математики... хотя я полагаю, что могу ошибаться.)

Спасибо!

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


person Sam Dealey    schedule 14.09.2011    source источник


Ответы (1)


Polygon — хороший выбор. Поскольку он реализует интерфейс Shape, < href="http://download.oracle.com/javase/7/docs/api/java/awt/Stroke.html" rel="nofollow noreferrer">createStrokedShape() доступен, как показано здесь. Для вращайте, переводите или масштабируйте объект, как показано здесь и здесь. Примеры могут помочь вам оценить производительность.

Приложение: Хотя я не пробовал, Arc2D может быть разумной альтернативой ротации Polygon. Родственный примитив QuickDraw когда-то дал почтенный MacDraw отличительный форма для стрелок.

person trashgod    schedule 14.09.2011
comment
Спасибо. К сожалению, это не очень помогает в моей ситуации. Это интерфейс, в котором пользователю разрешено рисовать от руки на изображении, поэтому стороны штриха должны изгибаться, что делает любое прямое использование Polygon невозможным. Я полагаю, что мог бы использовать многоугольник с дополнительными точками в качестве основы, а затем скопировать каждую точку и повернуть ее в соответствии с местоположением следующей точки рисования от руки, прежде чем добавлять ее в Path2D, но это возвращает меня к началу с тем, что кажется очень сложные, возможно, неэффективные решения. - person Sam Dealey; 15.09.2011
comment
Вы можете использовать любой Shape, возможно, один путей или кривых. - person trashgod; 15.09.2011
comment
На самом деле проблема не в том, какие объекты... Я уже использую все виды объектов формы и реализовал кисти с помощью Path2D. Но это не отвечает на вопрос, как эффективно рассчитать / построить кривые, связанные с сужением хода. Что мне нужно, так это Path2D.curveTo(x1, y1, x2, y2) - как мне преобразовать координаты мыши, которые у меня есть, в аргументы в методе curveTo? Возможно, это неправильный метод — это может быть cubeTo или quadTo, но моей проблемой является математика. Спасибо за предложения, тхо! :D - person Sam Dealey; 16.09.2011
comment
Что-нибудь здесь вы можете использовать? - person trashgod; 16.09.2011
comment
Спасибо чувак! Это движется в правильном направлении ... но я немного устал прямо сейчас и не могу сказать, будет ли что-то из этого полезно на первый взгляд ... Мне нужно будет получше взглянуть на это, когда я немного поспал. - person Sam Dealey; 17.09.2011
comment
Спасибо @mKorbel за архивирование таких примеров; Я приветствовал бы его точку зрения. - person trashgod; 17.09.2011