При построении кривой Безье на основе 3 точек линия будет пересекаться - PullRequest
0 голосов
/ 03 мая 2019

Квадратичная кривая Безье нуждается в этих трех точках, но у меня нет упорядоченной пары p1.Вместо этого у меня есть упорядоченная пара точек здесь

Средняя точка (P1) является самой высокой точкой параболы.

Парабола одинакова с обеих сторон

Как получить 3 балла с изображения 1, используя баллы с изображения 2?

1 Ответ

0 голосов
/ 03 мая 2019

Примените знания, объясненные в https://pomax.github.io/bezierinfo/#abc, и вам будет хорошо идти. Вам нужно будет решить, какое значение времени имеет точка «где-то на кривой», а затем вы можете использовать формулу для отношения проекции, чтобы найти фактическую координату контрольной точки.

Однако при t=0.5 соотношение составляет всего 1: 1, поэтому все становится еще проще, потому что ваша точка проецируется на среднюю точку линии, которая соединяет эту первую и последнюю точку, а реальная контрольная точка находится на одинаковом расстоянии. «выше» вашей точки, так как точка находится над этой линией:

https://i.stack.imgur.com/OViCo.png

То есть вы просто вычисляете среднюю точку:

m = 
  x: (p1.x + p2.x) / 2
  y: (p1.y + p2.y) / 2

и расстояние по осям x и y к средней точке от точки "p2 у вас есть":

d =
  x: (p2.x - m.x)
  y: (p2.y - m.y)

и тогда реальное p2 - это просто расстояние от "p2 у вас":

real2 = 
  x: p2.x + d.x
  y: p2.y + d.y

Однако обратите внимание, что этот только работает для t = 0,5: и эта проецируемая точка на линии start--end, и отношения расстояний будут (возможно, очень) разными для любого другого значения t и Вы должны использовать формулу, о которой говорит праймер Безье.

Также обратите внимание, что то, что вы называете "пиком", ни в коем случае не гарантируется при t = 0,5 ... например, посмотрите на эту кривую:

https://i.stack.imgur.com/jmvRo.png

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

...