2016-07-12 6 views
0

J'ai essayé de trouver des problèmes similaires, des tutoriels sur le dessin des arcs et des cercles et je n'ai rien trouvé d'utile pour cette question. Je joue avec le cairo et le pycairo en essayant de dessiner un cercle avec des quadrants. Je joue avec le cairo et le pycairo. Je ne suis pas sûr si je me perds à un point quelconque, mais ce que je m'attends à dessiner, eh bien, ce n'est pas ce que je dessine du tout.cairo/pycairo dessin arcs problème: PI/2 ne dessine pas ce que prévu

Mon but est de dessiner un cercle avec différents quadrants, avec une couleur de remplissage différente dans chaque quadrant.

Je construis la surface et le contexte et je peux dessiner un cercle complet (2 * PI), un demi-cercle (PI) et quand j'essaie de dessiner seulement un quadrant (PI/2 -> 90 degrés) le résultat est quelque chose que je ne comprends pas.

Premier exemple, un tour complet (360 degress aka 2 * radians PI):

ctx.rectangle(0, 0,1200,1200) # Rectangle(x0,y0,w,h) 
ctx.set_source_rgb(1,1,1) 
ctx.fill() 
ctx.arc(600,600,500,0,2*math.pi) 
ctx.set_source_rgb(1,0,0) 
ctx.fill() 
ctx.stroke() 

Le résultat est correct, un cercle complet:

full circle as supposed to be with 2 * PI radians (360 degrees)

Deuxième exemple, demi-cercle (180 degrés, radians PI):

ctx.rectangle(0, 0,1200,1200) # Rectangle(x0,y0,w,h) 
ctx.set_source_rgb(1,1,1) 
ctx.fill() 
ctx.arc(600,600,500,0,math.pi) 
ctx.set_source_rgb(1,0,0) 
ctx.fill() 
ctx.stroke() 

Le résultat est correct, demi-cercle:

(j'ai enlevé l'image parce que je n'ai pas assez réputation encore)

Troisième exemple, un quart/quart (90 degrés, PI/2):

ctx.rectangle(0, 0,1200,1200) # Rectangle(x0,y0,w,h) 
ctx.set_source_rgb(1,1,1) 
ctx.fill() 
ctx.arc(600,600,500,0,math.pi/2) 
ctx.set_source_rgb(1,0,0) 
ctx.fill() 
ctx.stroke() 

Je ne comprends pas: -? Que se passe-t-il ici?

The supposed to be quadrant, PI/2 90 degrees

S'il vous plaît, quelqu'un pourrait me aider? Je suis perdu.

Répondre

1

J'ai trouvé une solution par moi-même, mais je ne comprends pas pourquoi le comportement n'est pas exactement le même pour chaque longueur de radian.

Si vous émettez un MOVE_TO:

ctx.move_to(600,600) 

Maintenant, il rend parfaitement. Donc merci à tous de toute façon.

+0

Bon conseil, merci. Vous devriez accepter votre réponse, d'ailleurs. –

+0

Thx! J'ai oublié :) –