2011-05-06 4 views
10

Je fais des recherches depuis un moment et j'ai besoin d'aide. Je veux juste tirer 25 lignes du centre de mon écran (160 200) à une distance de 14,4 degrés. J'utilise cette ligne de code dans une boucle où x est le multiplicateur de 14,4 degrés -Core Graphics - dessiner une ligne à un angle

UIImage*backgroundImage = [UIImage imageNamed:@"Primate Background Only.png"]; 
[backgroundImage drawInRect:CGRectMake(0, 0, 320, 480)]; 

// Dessiner Cercle extérieur

rect = CGRectMake(0.0, 35.0, 320.0, 320.0);  
CGContextRef contextRef = UIGraphicsGetCurrentContext();    // Get the contextRef 
CGContextSetLineWidth  (contextRef, 0.5);     // Set the border width 
CGContextSetRGBFillColor (contextRef, (219.0f/255.0f), (219.0f/255.0f), (219.0f/255.0f), 0.05f);    // Set the circle fill color to GREEN 
CGContextSetRGBStrokeColor (contextRef, 0.0, 0.0, 0.0, 0.2);   // Set the circle border color to BLACK  
CGContextFillEllipseInRect  (contextRef, rect);     // Fill the circle with the fill color 
CGContextStrokeEllipseInRect (contextRef, rect);     // Draw the circle border 

// Dessine Inner Circle

rect = CGRectMake(25.0, 60.0, 270.0, 270.0);      // Get the contextRef 
CGContextSetLineWidth  (contextRef, 0.5);     // Set the border width 
CGContextSetRGBFillColor (contextRef, (219.0f/255.0f), (219.0f/255.0f), (219.0f/255.0f), 0.25f); 
CGContextSetRGBStrokeColor (contextRef, 0.0, 0.0, 0.0, 0.2);   // Set the circle border color to BLACK  
CGContextFillEllipseInRect  (contextRef, rect);     // Fill the circle with the fill color 
CGContextStrokeEllipseInRect (contextRef, rect);  

// Dessiner des segments

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextTranslateCTM(context, 0.0, 0.0);   
    for (x=1; x<26; x++) { 

     CGContextSetLineWidth  (context, 0.5); 
     CGContextSetRGBStrokeColor (context, 0.0, 0.0, 0.0, 0.25); 
     CGContextMoveToPoint  (context, 160, 200);     
     CGContextAddLineToPoint  (context, (160.0 * (cos((x*14.4)*(M_PI/180)))), (160.0 * (sin((x*14.4)*(M_PI/180)))));      // The angle is in degrees 
     CGContextAddLineToPoint  (context, 200, 65); 
     CGContextAddLineToPoint  (context, 160, 200);    
     CGContextStrokePath(context);       // Why is this not showing both line color and infill? 
     CGContextSetFillColorWithColor (context, [UIColor whiteColor].CGColor);  
     CGContextFillPath   (context); 
     CGContextRef context = UIGraphicsGetCurrentContext(); 
    }   

(J'avais l'intention d'afficher une image ici mais elle ne me le permet pas!)

Est-ce que quelqu'un peut corriger mes fonctions trigonométriques? Ceci est destiné à dessiner 25 lignes dans le sens des aiguilles d'une montre de 12:00 à 24:00. Au lieu de cela, il ne recule que de 90 degrés puis revient, toutes les lignes sont aussi en longueur.

Très reconnaissant

Au-dessus est un plus grand échantillon de code utilisé pour dessiner des cercles extérieurs de remorquage et les segments intérieurs comme l'a demandé. Je vais essayer de télécharger l'image suivante.

enter image description here

+1

La boucle qui répète 'x', etc. –

+0

Gustav a raison. Aussi, si vous pouvez télécharger l'image ailleurs et fournir un lien vers celle-ci, alors quelqu'un avec une réputation suffisante peut éditer votre message afin de le mettre en ligne. – Tommy

+0

Je reformaterais ton code mais c'est trop ... peux-tu le reformater s'il te plaît afin qu'il soit lisible? Sauf que vous essayez de l'obscurcir intentionnellement :) –

Répondre

16

Votre principal problème est cette ligne de code:

CGContextAddLineToPoint(context, (160.0 * (cos((x*14.4)*(M_PI/180)))), 
           (160.0 * (sin((x*14.4)*(M_PI/180))))); 

il devrait être:

CGContextAddLineToPoint(context, 160 + (160.0 * (cos((x*14.4)*(M_PI/180)))), 
           200 + (160.0 * (sin((x*14.4)*(M_PI/180))))); 

Comme vous l'avez écrit à l'origine, il les lignes ont été être attiré par rapport à 0 , 0 mais vous voulez dessiner par rapport à votre point central (160, 200).

Les 2 lignes suivantes sont aussi un peu suspect:

 CGContextAddLineToPoint  (context, 200, 65); 
     CGContextAddLineToPoint  (context, 160, 200); 

Il est clair pour moi ce que vous essayez de faire, mais ce finiriez tracer une ligne à l'extrémité de chaque bras un point fixe (200,65) et de là retour à votre centre, ce qui n'est certainement pas ce que vous vouliez! Essayez de commenter ces lignes, confirment que les « armes » sont en cours d'élaboration correctement et à partir de là ...

Hope this est clair

Si vous faites ces corrections votre écran ressemblera à quelque chose comme ceci: La trigonométrie a l'air bien, pouvez-vous nous montrer plus de votre code? Screenshot

+0

@Frank, bienvenue à stackoverflow!Votre modification proposée devrait probablement être un commentaire sur cette réponse, ou un commentaire sur votre question. :) Modifier les questions et les réponses d'autres personnes est bien, mais c'est bien si elles clarifient des points, corrigent des fautes de frappe, etc. Poursuivre une conversation avec des modifications conduit rapidement à un contenu illisible. (Jamais essayé de lire [le premier wiki du monde] (http://c2.com/cgi/wiki?WelcomeVisitors)? Incomprehensible. :) – sarnold

Questions connexes