2010-12-13 42 views
10

Tôi muốn xây dựng một CGPathRef theo chương trình dựa trên tọa độ của Mặt trời tại các điểm khác nhau trong ngày. Tính toán các điểm không phải là một vấn đề, nhưng tôi muốn thực hiện một CGPathRef đó là mịn và suy nghĩ CGPathAddCurveToPoint sẽ là thích hợp.Các tham số đối với CGPathAddCurveToPoint có nghĩa là gì?

Tôi hiểu thông số đường dẫn, biến đổi, x và y, nhưng tôi không chắc chắn về các thông số khác. Mỗi tài liệu của Apple là các điểm kiểm soát, và tôi đoán chúng giống như bạn thấy trong chương trình vẽ vector, nơi bạn có thể điều chỉnh cách đường cong đi qua điểm.

Câu hỏi của tôi là cách chọn các điểm liên quan đến tọa độ của tôi mà không biết những tọa độ đó trước thời hạn nào? Tôi nghĩ có lẽ chỉ trừ số tiền đã đặt từ mỗi điểm điều khiển đầu tiên và cộng số tiền tương tự cho các điểm điều khiển thứ hai, nhưng âm thanh đó đơn giản hơn đối với tôi. Có một phương pháp tiêu chuẩn để tạo ra các điểm kiểm soát "có ý nghĩa" cho một đường cong trơn tru không?

void CGPathAddCurveToPoint (
    CGMutablePathRef path, 
    const CGAffineTransform *m, 
    CGFloat cp1x, 
    CGFloat cp1y, 
    CGFloat cp2x, 
    CGFloat cp2y, 
    CGFloat x, 
    CGFloat y 
); 
+0

Vì tôi thấy câu hỏi này trong khi có vấn đề này: Nếu bạn đang sử dụng để phần mềm đồ họa vector như Illustrator, ý nghĩa của các điểm kiểm soát là hơi khác với những gì được sử dụng trong Đồ họa cốt lõi. Nếu bạn có đường dẫn [(a1, p1, b1), (a2, p2, b2), ...] trong đó pi là điểm và ai là điểm kiểm soát được kết nối trực quan với chúng, đường dẫn tương đương trong Đồ họa lõi sẽ bắt đầu với [(b1, p2, a2), ...] (sau một moveToPoint cho p1). Tôi hy vọng điều này là hữu ích cho một ai đó. – mrueg

Trả lời

6

Những điểm thêm là những điểm kiểm soát Bút chì cho đường cong ra khỏi nguồn điểm (hiện tại) và đường cong vào điểm mục tiêu (xem http://en.wikipedia.org/wiki/Bézier_curve cho một lời giải thích chung). Dòng currentX, currentY - cp1x, cp1y là vector 'out' của điểm hiện tại và cp2x, cp2y - x, y là vector 'in' đến điểm cuối cùng.

Một cách hợp lý để tạo ra một đường cong mượt mà từ p1 đến p2 (giả sử 4 điểm p0, p1, p2, p3) là (giả):

v = (strength of curve from 0.0 to 1.0) 
cp1x = p1.x+v*(p1.x-p0.x) 
cp1y = p1.y+v*(p1.y-p0.y) 
cp2x = p2.x-v*(p3.x-p2.x) 
cp2y = p2.y-v*(p3.y-p2.y) 

Đối với điểm khởi đầu, thiết lập cp1x, cp1y để bắt đầu x, y và cho điểm kết thúc đặt cp2x, cp2y đến kết thúc x, y.

LƯU Ý: Tôi đã cập nhật câu trả lời để kết hợp các ý kiến ​​từ ughoavgfhw

+2

Denis viết về chúng là điểm kiểm soát, nhưng sai về cách sử dụng của chúng. cp1x, cp1y cho vector OUT của điểm CURRENT, và cp2x, xp2y cho vector INTO điểm x, y. Ngoài ra, sử dụng các điểm cuối cùng và tiếp theo có lẽ sẽ cung cấp cho bạn các đường thẳng. Xin lỗi, nhưng tôi không thể cho bạn biết làm thế nào bạn thực sự nên tính điểm, nhưng tôi có thể đề nghị cố gắng CGPathAddArcToPoint thay thế. – ughoavgfhw

Các vấn đề liên quan