2008-12-12 6 views
4

저는 기하학적 도형 조작을위한 캔버스를 만들기위한 Python 라이브러리를 찾고 있습니다. 특히, 임의의 다각형을 만들어 캔버스에 배치 할 수있는 능력이 필요합니다. 다각형은 투명하고 알파 채널이 있어야하며, 현재 캔버스에있는 다각형을 편집 할 수 있어야합니다. 주어진 픽셀 (거기에있는 모든 투명 조각의 집합체)의 실제 색상을 얻을 수 있어야합니다.기하학적 도형을위한 Python Canvas 라이브러리

기본적으로 이걸 만들려고합니다 : http://alteredqualia.com/visualization/evolve/ in python.

답변

1

Pygame이 작업을 수행 할 수 있어야합니다.

참조 pygame.draw.polygon

5

나는 cairo 당신이 원하는 것을 많이 할 것이라 생각합니다. 그들은 python bindings도 가지고 있습니다.

이전에 그려진 다각형을 수정하는 데 도움이되지 않는 요구 사항 중 하나는 사용자를 위해 수행 할 캔버스에 대해 잘 모릅니다.

0

HTML 캔버스를 사용하면 요소를 수정할 수 있으므로 다른 캔버스도있을 수 있다고 생각합니다. 그러나 기본적으로 모든 폴리곤 목록을 유지해야 할 필요가 없으며 변경을 원할 때 목록의 항목을 변경 한 다음 새 캔버스를 만듭니다. 간접비.

2

OpenGL과 비슷한 소리입니다.

내 조언은 어떤 라이브러리를 선택하든 알고리즘에 적합한 다각형의 데이터 구조를 만들어보다 단순하고 읽기 쉽도록 만들 수 있다는 것인데 이러한 알고리즘이 캔버스를 직접 조작하려고합니다. 그런 다음 주 논리의 개별 (즉 독립) 코드를 작성할 수 있습니다.

0

Qt 및 wxWidgets 모두 일부 캔버스 그리기 기능이 있습니다 (Qt는 GraphicsView라고 함). 빠른 Google 검색을 통해 많은 예제를 얻을 수 있으므로 요구 사항에 맞는지 확인할 수 있습니다.

2

This discussion on Stackoverflow에는 Python 용 다양한 GUI 툴킷에 대한 비교 및 ​​코드 스 니펫이 있습니다. 나는 의 QT에 대한 투명성을 보장 할 것입니다. 노키아 (nee Troll)는 QT를위한 데모 슈트를 만들어 당신에게 그 능력에 대한 아이디어를 줄 것입니다.

1

시도 pyglet. OpenGL이있는 Python 용 그래픽 라이브러리입니다. 이전에 OpenGL 프로그래밍을 해본 적이 있다면 확실히 원하는 것을 얻을 수있는 가장 쉬운 방법입니다.

1

는 내가 HTML 캔버스 당신이 그것을하지 않습니다 요소

을 수정할 수 있습니다 생각합니다. 내 HTML canvas tutorial을 확인하여 움직이는 공을 어떻게 그려야하는지 확인할 수 있습니다. 화면을 지우고 원하는 자리에 새로운 원을 그립니다.

pyglet, pygame, QT, Tkinter, wxPython 및 cairo 모두에서 간단한 모양을 캔버스에 그릴 수 있습니다.

일반적으로 화면에 그려지는 객체를 나타내는 "스프라이트"또는 "도형"이라고하는 객체가 있으며이 객체를 모두 컨테이너에 저장합니다. 그런 다음 라이브러리 나 프레임 워크는 모든 프레임에서 캔버스에 모든 것을 렌더링합니다.따라서 사용자 (사용자)는 화면에서 오브젝트를 수정할 수 있다고 생각합니다. 당신은 볼의 x와 y 좌표를 설정하고 다음 프레임에서 볼을 렌더링합니다. 그러나 낮은 수준에서는 모든 것이 지워지고 다시 그려집니다.

계산 집약적 인 애니메이션의 경우 double-buffering이라는 기술을 사용하여 화면상의 비트 맵 대신 메모리의 비트 맵을 수정 한 다음 드로잉 프로세스가 단순히 비트 맵을 화면에 복사하는 것입니다.

목록의 항목을 변경 한 다음 상당한 오버 헤드가있는 것처럼 보이는 새 캔버스를 만듭니다.

위에서 언급 한 모든 프레임 워크는 그릴 개체 목록에 대한 훌륭한 추상화를 제공하므로 수동으로 유지 관리 할 필요가 없으며 스프라이트/그려진 그림은 실제로 낮은 수준이 아닐지라도 화면에서 직접 이동할 수 있습니다.

+0

"화면을 지우고 원하는 지점에 새로운 원을 그립니다."- 사실이지만 성능면에서 현저한 문제는 아닙니다. 나는 비슷한 것을했고, 대부분의 시간은 그림을 비교하는 것 (휘트니스를 평가하는 것)이 아니라 그림을 비교하는 것입니다. 페널티가 너무 커야해서는 안됩니다. – stefs

+0

성능 문제가 아니라 캔버스에있는 요소를 수정할 수 없다는 말은 아닙니다. 당신은 변화된 것을 그려야 만합니다. – llimllib

관련 문제