Получение N точек кривой Безье - PullRequest
0 голосов
/ 09 мая 2020

Как я могу вычислить N точек на кривой Безье, имеющей 2 контрольные точки? У меня есть аналогичный способ получить N точек по дуге / окружности с помощью функции ниже. Есть ли аналогичный способ сделать это с кривой Безье? К сожалению, path.addArc() и path.addCurve() не возвращают достаточно очков, чтобы мои формы были гладкими в Spritekit, поэтому получение большого количества точек и использование path.addLine() между ними - достаточно хорошее решение.

func getCirclePoints(centerPoint: CGPoint, radius: CGFloat, startAngle: CGFloat, endAngle: CGFloat, clockwise: Bool) -> [CGPoint] {
    let n : CGFloat = clockwise ? -1 : 1
    let points: [CGPoint] = stride(from: startAngle - n, through: endAngle + n, by: n).map {

        let degreesToRadians = CGFloat($0) * .pi / 180

        let x = centerPoint.x + radius * cos(degreesToRadians)
        let y = centerPoint.y + radius * sin(degreesToRadians)

        return CGPoint(x: x, y: y)
    }
    return points
}

1 Ответ

0 голосов
/ 10 мая 2020

разобрался:

func getCurvePoints(p0: CGPoint, p1: CGPoint, p2: CGPoint, p3: CGPoint) -> [CGPoint] {
    let n : CGFloat = 0.005
    let points: [CGPoint] = stride(from: 0 - n, through: 1 + n, by: n).map {

        let x = pow(1 - CGFloat($0), 3) * p0.x + 3 * pow(1 - CGFloat($0), 2) * CGFloat($0) * p1.x + 3 * (1 - CGFloat($0)) * pow(CGFloat($0), 2) * p2.x + pow(CGFloat($0), 3) * p3.x
        let y = pow(1 - CGFloat($0), 3) * p0.y + 3 * pow(1 - CGFloat($0), 2) * CGFloat($0) * p1.y + 3 * (1 - CGFloat($0)) * pow(CGFloat($0), 2) * p2.y + pow(CGFloat($0), 3) * p3.y

        return CGPoint(x: x, y: y)
    }
    return points
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...