UIBezierPath
을 사용하여 간단한 포물선 모양을 그려야합니다. 나는 maxPoint
과 boundingRect
을 가지고 있는데 그 중 제가 포물선의 너비와 신축을 기준으로 삼고 있습니다.
여기가 포물선을 그리는 만든 기능이다 (I 컨테이너보기에서 포물선을 그리는는 rect
는 container.bounds
될 것입니다) :취소 UIBezierPath 커브 메커니즘, controlPoint 및 커브 지점
func addParabolaWithMax(maxPoint: CGPoint, inRect boundingRect: CGRect) {
let path = UIBezierPath()
let p1 = CGPointMake(1, CGRectGetMaxY(boundingRect)-1)
let p3 = CGPointMake(CGRectGetMaxX(boundingRect)-1, CGRectGetMaxY(boundingRect)-1)
path.moveToPoint(p1)
path.addQuadCurveToPoint(p3, controlPoint: maxPoint)
// Drawing code
...
}
내 문제는 내가 할 수있는 기능에 보내는 maxPoint
를 원하는이다 포물선 자체의 실제 극한 지점이되어야합니다. 예를 들어, 내가 (CGRectGetMidX(container.bounds), 0)
으로 전송하면, 최대 포인트는 최상위 센터에 있어야합니다.
그래서 정확히 어떤 경로가 여기 않는 :하지만이 특정 시점에이 기능을 사용하여,이 결과는 모습입니다? 또는 다른 말로하면, controlPoint
에서 내가 필요한 실제 최대 점수를 얻으려면 어떻게해야합니까? 덧셈을 시도하고 boundingRect
의 높이를 기준으로 y
값에서 다른 값을 빼내려고 시도했지만 다른 점이 다르기 때문에 다른 조합으로 서로 다른 동작을합니다. 어떤 종류의 곱셈기가 추가 된 것 같습니다. 어떻게 해결할 수 있습니까?
목표가 일련의 점에있는 부드러운 곡선을 만드는 것이라면 Catmull-Rom 스플라인이 베 지어보다 더 나은 선택 일 수 있습니다 곡선. 그들은 베 지어보다 계산 상 더 비쌉니다. 모든 제어점을 통과하는 곡선을 만듭니다. 그러나 베 지어 커브처럼 너무 커브를 그리면 Catmull-Rom 스플라인에서 "꼬임"을 얻을 수 있습니다. Erica Sadun의 우수한 iOS 개발자의 요리 책 서적에는 Catmull-Rom 스플라인에 대한 작업 코드가 있습니다. –
Catmull-Rom 스플라인에 대한 하나의 좌절감은 첫 번째 점과 마지막 점이 포함되어 있지 않기 때문에 "올바른 위치"에 추가 확장 점을 추가해야한다는 것입니다. 구심력 C-R 스플라인을 사용하면 꼬임을 피할 수 있습니다. –