2016-04-13 3 views
1

У меня есть CubicCurve в Java, который определяется четырьмя контрольными точками. Я могу нарисовать полученную форму, но как я могу получить эффективную каждую точку в заданном разрешении этой фигуры? Кстати, PathIterator «только» возвращает контрольные точки, но не точки самой кривой.Как получить точки кривой (формы)

+0

В чем причина, чтобы иметь массив точек кривой? Для большинства обычных задач (чтобы определить, находится ли точка на кривой, найти точку пересечения с линией, анимировать над кривой), обычно существует формула. –

+0

В моем случае я хочу использовать данные кривой для применения гамма-коррекции на основе этой кривой. Поэтому мне нужно столько дискретных точек, сколько возможно. – Thomas

+0

Итак, здесь вам действительно не нужны точки, но передайте функцию 'newBrightness = f (oldBrightness)'. –

ответ

0

2D параметрические кубические кривые только два многочлены

x(t)=ax0+ax1*t+ax2*t*t+ax3*t*t*t 
y(t)=ay0+ay1*t+ay2*t*t+ay3*t*t*t 

где t=<0.0,1.0> так что вы вычислить a?0...a?3 коэффициенты из контрольных точек, а затем просто цикл t с максимально малым шагом, как вам нужно, чтобы получить все вопросы, которые вы необходимо, например, dt=1.0/(n-1), где n - количество баллов.

Коэффициенты зависят от кривой используется для Безье/СПЛАЙН или интерполяции смотрите:

+0

Я боюсь, что коэффициенты, которые вы используете в формуле, не совпадают с используемыми для CubicCurve в Java: https://docs.oracle.com/javase/7/docs/api/java/awt/geom/ CubicCurve2D.html # constructor_summary – Thomas

+0

@Thomas Затем используйте то, что у вас есть ... Если вы можете извлечь коэффициенты из формы, вам не нужно их вычислять. Полиномиальные уравнения 'x (t), y (t)' будут одинаковыми. Единственное, что может измениться, это интервал 't' – Spektre

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