2015-05-08 5 views
1

Для проекта я пытаюсь нарисовать кривые Безье. Теперь я создал свой собственный класс BezierCurve, который вычисляет точки через forward differencing. В настоящее время я рисую кривую, рисуя Line2D.Double между каждыми двумя точками. Это мой текущий вывод;Рисунок кривой Безье

enter image description here

Верхняя кривая (1) является один я нарисовал с моей BezierCurve класса. Нижняя кривая (2) представляет собой ту же кривую Безье, сдвинутую вниз и нарисованную объектом GeneralPath (с использованием метода curveTo).

Теперь я не могу не заметить, что (2) выглядит намного плавнее, чем (1) Конечно, я мог бы использовать GeneralPath (или CubicCurve2D.Double) сам, но так как это для проекта, это не вариант.

Теперь, мой вопрос: есть ли что-нибудь, что я могу сделать, чтобы кривая выглядела более гладкой? Я попробовал просто увеличить количество очков и использовать fillRect(), но они не показывают улучшения.

+0

Сделать точки тарифа от каждого в какой-то фактор (например, 10) – MaxZoom

+0

Рассмотрим делать свой собственный [анти-aliazing] (Http: //en.wikipedia. org/wiki/Anti-aliasing), что потребует достойного понимания алгоритмов антиалиасинга и создания графики. –

+1

@ControlAltDel: Я прошу отличить. Учитывая его ограничения, которые находятся вне его контроля, решение далеко не тривиально. –

ответ

0

Вы могли бы попытаться установить сглаживанием на:

Graphics2D g2 = (Graphics2D) g; 
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
Смежные вопросы