Python能不能方便的画三角形?

b381463 2010-09-30 12:56:29
我需要在一张图上面画很多三角形,一般是等腰三角形,也可能是全等三角形。

有没有很方便的函数可以用?

PIL里面好像找不到,专家出出招,谢谢!
...全文
540 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
b381463 2010-10-04
  • 打赏
  • 举报
回复
爆汗~~~~~~
iambic 2010-10-01
  • 打赏
  • 举报
回复
画三条线,或者画一个多边形,这些基本的函数应该都有的啊。
jmx_7247 2010-10-01
  • 打赏
  • 举报
回复
最好保持统一啦,我其他图形都是用PIL画的,这个也最好还是用PIL画吧。
angel_su 2010-10-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 iambic 的回复:]

画三条线,或者画一个多边形,这些基本的函数应该都有的啊。
[/Quote]
估计lz说的方便应该是针对等腰/等边三角,可能不要直接用三点改用其它参数这样容易构思布局,譬如下面脚本继承ImageDraw,用内接圆心,半径,顶点角度为参数画三角...
# -*- coding: gbk -*-
import Image
import ImageDraw
from math import sin, cos, pi

class MyDraw(ImageDraw.ImageDraw):
def __init__(self, im, mode=None):
ImageDraw.ImageDraw.__init__(self, im, mode=mode)

def isotriangle(self, xy, r, a=270, b=60, outline=None, fill=None):
x, y = xy
# a: 顶点方向,默认朝上,按x轴逆时针算是270度
# b: 顶点角度,默认60度即是等边三角
a, b = a*pi/180, b*pi/180 # 角度转弧度
x1, y1 = x+cos(a)*r, y+sin(a)*r
x2, y2 = x+cos(pi+a-b)*r, y+sin(pi+a-b)*r
x3, y3 = x+cos(pi+a+b)*r, y+sin(pi+a+b)*r
self.polygon((x1, y1, x2, y2, x3, y3), outline=outline, fill=fill)

@staticmethod
def Draw(im, mode=None):
try:
return im.getdraw(mode)
except AttributeError:
return MyDraw(im, mode)


im = Image.new('RGB', (640, 480), 'white')
draw = MyDraw.Draw(im)
clrs = ['red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'purple']
for i in range(0, 120, 10):
draw.isotriangle((160, 150), 100, i, outline=clrs[i%7])
draw.isotriangle((480, 150), 100, i, fill=clrs[i%7])
draw.ellipse((60, 50, 260, 250), outline='red')

def generator(xy, r, n):
yield xy, r/2., n
r /= 2.
n -= 1
if n:
x, y = xy
xy = (x, y-r)
for ret in generator(xy, r, n):
yield ret
xy = (x-3.**.5*r/2, y+r/2)
for ret in generator(xy, r, n):
yield ret
xy = (x+3.**.5*r/2, y+r/2)
for ret in generator(xy, r, n):
yield ret

for xy, r, n in generator((160, 400), 120, 4):
draw.isotriangle(xy, r, 90, fill=clrs[n%7])
draw.isotriangle((160, 400), 120, outline='green')

draw.isotriangle((400, 360), 30, outline='red')
draw.ellipse((370, 330, 430, 390), outline='black')
draw.isotriangle((480, 360), 30, 45, fill='green')
draw.ellipse((450, 330, 510, 390), outline='black')
draw.isotriangle((560, 360), 30, 0, outline='blue', fill='orange')
draw.ellipse((530, 330, 590, 390), outline='black')
im.show()

ultimatebuster 2010-10-01
  • 打赏
  • 举报
回复
或者可以用Turtle
Rico_Liu 2010-09-30
  • 打赏
  • 举报
回复
有个外部库叫PYGAME,楼主搜下,使用方法很简单。
b381463 2010-09-30
  • 打赏
  • 举报
回复
哈哈,这个对我这个菜鸟来说不太可能啦。
angel_su 2010-09-30
  • 打赏
  • 举报
回复
按自己所需扩充下吧,应该也没几行代码...

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧