У меня есть CubicCurve в Java, который определяется четырьмя контрольными точками. Я могу нарисовать полученную форму, но как я могу получить эффективную каждую точку в заданном разрешении этой фигуры? Кстати, PathIterator «только» возвращает контрольные точки, но не точки самой кривой.Как получить точки кривой (формы)
ответ
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
- количество баллов.
Коэффициенты зависят от кривой используется для Безье/СПЛАЙН или интерполяции смотрите:
Я боюсь, что коэффициенты, которые вы используете в формуле, не совпадают с используемыми для CubicCurve в Java: https://docs.oracle.com/javase/7/docs/api/java/awt/geom/ CubicCurve2D.html # constructor_summary – Thomas
@Thomas Затем используйте то, что у вас есть ... Если вы можете извлечь коэффициенты из формы, вам не нужно их вычислять. Полиномиальные уравнения 'x (t), y (t)' будут одинаковыми. Единственное, что может измениться, это интервал 't' – Spektre
В чем причина, чтобы иметь массив точек кривой? Для большинства обычных задач (чтобы определить, находится ли точка на кривой, найти точку пересечения с линией, анимировать над кривой), обычно существует формула. –
В моем случае я хочу использовать данные кривой для применения гамма-коррекции на основе этой кривой. Поэтому мне нужно столько дискретных точек, сколько возможно. – Thomas
Итак, здесь вам действительно не нужны точки, но передайте функцию 'newBrightness = f (oldBrightness)'. –