Java AWT - нарисуйте многоугольник, соединенный плавными изогнутыми линиями - PullRequest
5 голосов
/ 16 августа 2010

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

Тем не менее, я рисую многоугольник на холсте. У него может быть произвольное количество точек, но давайте пока предположим 12. Многоугольник в том виде, в котором он реализован, соединен прямыми линиями от точки к точке. Я хотел бы применить какой-то тип преобразования, чтобы форма рисовалась более «естественно», как если бы кто-то соединил точки с помощью ручки / карандаша.

Я не уверен, что это слишком расплывчатое описание. Я думаю, что я ищу, это кривая Безье, но я слабак челюсти графики и геометрии. Меня интересуют новые решения в целом, просто то, что делает многоугольник с прямой стороной больше похожим на чернильный шарик. Может быть, с помощью элементов управления для достижения более или менее «естественной» формы.

Если вам нужна дополнительная информация, пожалуйста, не стесняйтесь спрашивать.

Доброе спасибо, Matt

Ответы [ 2 ]

4 голосов
/ 16 августа 2010

Для начала:* создать GeneralPath * добавить кривые к пути, используя GeneralPath.curveTo (с плавающей точкой x1, с плавающей точкой y1, с плавающей точкой x2, с плавающей точкой y2, с плавающей точкой x3, с плавающей точкой y3)* получить объект Graphics2D * используйте Graphics2D.draw (Shape s), чтобы нарисовать GeneralPath (который является формой)

При желании вы можете установить ограничение строки и стиль соединения:* Создайте BasicStroke (ширина = 1, cap = CAP_ROUND, join = JOIN_ROUND)* используйте Graphics2D.setStroke для установки обводки

Единственная сложная часть заключается в том, что вам нужно вычислить x3, y3 метода кривой To

0 голосов
/ 16 августа 2010

С JVSE JVM вы можете привести любой объект Graphics к объекту Graphics2D, а затем использовать его для рисования линий Безье.

См. Здесь пример

...