Ниже показано, что я использую, чтобы получить контрольную точку квадратной кривой Безье. Это должно работать для вашей проблемы, где контрольная точка находится на кривой. Это в Swift, но вы сможете легко конвертировать его на другой язык. По сути, в середине линии (точками которой являются точка 1 и точка 2) я строю перпендикулярную линию заданной длины. Параметр «По часовой стрелке» определяет, на какую сторону линии должна падать точка.
func getControlPointWithPoint1(point1:CGPoint, point2:CGPoint, length:CGFloat, clockwise:Bool) -> CGPoint {
let angle = getAngleWithPoint1(point1, point2:point2)
let direction = clockwise ? 1 : -1
let perpendicularAngle = angle + (CGFloat(direction) * CGFloat((M_PI / 2)))
let midPoint = getMidPointWithPoint1(point1, point2:point2)
return CGPointMake(midPoint.x + (cos(perpendicularAngle) * length), midPoint.y + (sin(perpendicularAngle) * length))
}
func getAngleWithPoint1(point1:CGPoint, point2:CGPoint) -> CGFloat {
return atan2((point2.y - point1.y), (point2.x - point1.x))
}
func getMidPointWithPoint1(point1:CGPoint, point2:CGPoint) -> CGPoint {
return CGPointMake((point1.x + point2.x) / 2, (point1.y + point2.y) / 2)
}
Ниже показано, как это будет отображаться на буквы вашей диаграммы:
c = getControlPointWithPoint1(a, point2:b, length:h, clockwise:true)
person
Mark Horgan
schedule
20.11.2014