2010-08-15 4 views
4

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

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

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

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

Kind спасибо, Matt

+0

Если AWT/Swing имеет встроенный криволинейный рисунок Безье (я не знаю, делает оно это или нет), тогда вы можете это сделать. Но моя первая мысль состояла бы в том, чтобы просто «обогнуть углы», которые, я думаю, вы, возможно, могли бы самостоятельно определить, используя объект «Graphics». У вас будет только комбинация прямых линий и небольших дуг, соединенных вместе. – MatrixFrog

+0

Я не думаю, что могу преувеличивать свою несостоятельность графики. Сейчас я позволяю AWT выполнять всю работу. :) – Matt

+0

Когда я преувеличиваю * свою * некомпетентность, я считаю, что я должен полагаться на особенно решительную терминологию, которая обычно вульгарная. Надеюсь, это поможет. –

ответ

4

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

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

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

0

С J2SE JVM вы можете бросить объект любого графического объекта к Graphics2D, а затем использовать это, чтобы рисовать линии Безье.

See here for an example

Смежные вопросы