2010-12-21 2 views
7

Kakao'da çizim (oldukça basit) şekillerle tutmaya çalışıyorum. Düz kenarlarla nasıl yol açacağımı anlıyorum (duh!), Fakat eğriler söz konusu olduğunda, kafamı hangi şekillerin hangi eğriyi üreteceği konusunda atamıyorum. Spesifik olarak, yönteme controlPoint1: ve controlPoint2: argümanlarının şekli nasıl etkilediğini bilmiyorum.NSBezierPath eğrisini anlamak için zor bir zaman geçirmeToPoint: yöntem

Google Chrome Tab

Ve kullanıyorum kodudur:

Google Chrome'da yeni bir sekme şeklini yaklaşmak için çalışıyorum

-(void)drawRect:(NSRect)dirtyRect { 
    NSSize size = [self bounds].size; 

    CGFloat height = size.height; 
    CGFloat width = size.width; 

    NSBezierPath *path = [NSBezierPath bezierPath]; 
    [path setLineWidth:1]; 

    [path moveToPoint:NSMakePoint(0, 0)]; 

    [path curveToPoint:NSMakePoint(width * 0.1, height) 
     controlPoint1:NSMakePoint(width * 0.05, height) 
     controlPoint2:NSMakePoint(width * 0.03, height * 0.05)]; 

    [path lineToPoint:NSMakePoint(width * 0.9, height)]; 

    [path curveToPoint:NSMakePoint(width, 0) 
     controlPoint1:NSMakePoint(width * 0.95, height) 
     controlPoint2:NSMakePoint(width * 0.97, height * 0.05)]; 

    [path closePath]; 

    [[NSColor colorWithCalibratedWhite:0.98 alpha:1] set]; 
    [path fill]; 

    [[NSColor colorWithCalibratedWhite:0.6 alpha:1] set]; 
    [path stroke]; 
} 

Ben korkunç başaramıyorum. Biz güzel şeyler :(

My Attempt olamaz neden

bakınız, bu

kimse bana o çizim eğrileri gelince düşünmek konusunda bazı önerilerde verebilir misiniz? Bu yolu çizer örneği çok iyi olurdu, ama gerçekten bu girdileri sadece beni geri tutan curveToPoint:controlPoint1:controlPoint2: ile anlıyoruz.

UPDATE | @ Ahruman'ın cevabı nihayet şekil almaya başladım.% 100 değil. köşeler, ama aslında en azından simetrik bir şekli var :)

Getting there

cevap

9

akım çekme noktasına (kapalı) ve kontrol noktası 1 arasındaki çizgi başlangıcında eğrisinin teğet olduğu. Kontrol noktası 2 ve “to” noktası arasındaki çizgi, eğrinin sonunda teğettir. Bunlar, Bézier yolları ile herhangi bir vektör çizim uygulamasında gördüğünüz iki tanjant kontrolün uçlarına karşılık gelir. Birini kullanmadıysanız Inkscape ücretsizdir.

+0

+1 Kalın kafamı gerçekleştirmek için +1 Bir grafik programı ile oynamalıyım :) Sonunda neredeyse doğru bir şey buldum! – d11wtq

6

görüntü aşağıda kabul cevabını göstermektedir,

Cubic Bézier curve

kontrol noktası 1

onun başında eğrinin teğet olduğunu. Başlangıç ​​Noktası Bezier eğrisi noktası kontrol etme 1 ila

Bu noktalı çizgi olacaktır

kontrol noktası 2 arasında line “” noktası eğrisinden

sonunda teğet

Bu bitiş ve Kontrol Noktası 2.

Bu görüntü official Apple documentation ila arasındaki noktalı çizgi.