2015-11-05 6 views
4

Я рисую довольно простую форму, используя turtle модуль Python, и код ниже:Python черепашьей графики несогласованность между различными ОСАМИ,

import turtle 

turtle.color('black', '#fef00e') 
turtle.begin_fill() 
turtle.left(180) 
turtle.forward(100) 
for i in range(5): 
    turtle.right(90) 
    turtle.forward(100+50*i) 
turtle.end_fill() 
turtle.done() 

Как ни странно, это производит два различных результата на Windows (слева) и все другие ОС Я пробовал (Ubuntu, Arch, OSX). Области с четным количеством перекрывающихся заполнений по-прежнему заполняются в Windows, но снова закрываются для других. Может ли кто-нибудь объяснить мне, в чем причина этого, и есть ли способ повлиять на него? Кажется странным, что такое поведение было бы настолько непоследовательным.

enter image description hereenter image description here

Кажется, что это выбор дизайна, а также; мне сразу не кажется очевидным, какая из двух является «правильной» версией.

+0

По какой-то причине они, вероятно, используют разные правила заполнения. Левым будет [правило ненулевого обмотки] (https://en.wikipedia.org/wiki/Nonzero-rule) и правое [нечетное правило] (https://en.wikipedia.org/ вики/нечет% E2% 80% 93odd_rule). –

ответ

1

Проблема заключается в том, означает ли «заливка» означает «цвет» или «цвет переключателя» на конкретной системе. Цвет дважды - цвет. Чтобы переключиться дважды, не нужно переключаться. (Эта пара является основой «Законов формы» Спенсера Брауна.) Черепаха реализована поверх Tkinter. Вот простая программа Tkinter, которая воспроизводит левую фигуру в Windows (хотя без черных линий, добавляется черепаха). Я сильно подозреваю, что вы получите правильную цифру на * nix (на данный момент у меня ее нет).

from tkinter import * 
root = Tk() 
canv = Canvas(root, width=800, height=800) 
canv.pack() 
l = canv.create_polygon(
     500,400, 400,400, 400,300, 550,300, 
     550,500, 300,500, 300,200, 500,400, fill='yellow') 
root.mainloop() 

Если это так, то я подозреваю, что другой является результатом базовой графической системы и какой интерпретация она дает «заливке».

Я смотрел в tk manual, но ничего не нашел о значении заполнения дважды, просто '-fill color'.

+0

Я могу подтвердить, что это действительно воспроизводит ту же самую разницу. Я подозревал, что это была основная библиотека графики, которая вызывает это различие, поскольку код Python, запущенный на обеих платформах, идентичен (вплоть до скомпилированного CPython под ним). – Joost

Смежные вопросы