Python沿三角形的每一侧反射图像

2024-03-29 07:35:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个位于屏幕中心的三角形。你知道吗

enter image description here

from PIL import Image, ImageDraw
GRAY = (190, 190, 190)
im = Image.new('RGBA', (400, 400), WHITE)
points = (250, 250), (100, 250), (250, 100)
draw = ImageDraw.Draw(im)
draw.polygon(points, GRAY)

如何复制此图像并沿三角形的每边在不同的随机点上反射它。例如。。。你知道吗

enter image description here


Tags: fromimageimportnewpil屏幕中心points
1条回答
网友
1楼 · 发布于 2024-03-29 07:35:55

计划:首先在大三角形的边缘找到一个随机点,在那里放置一个较小的点,然后旋转它,使其与边缘适当吻合。你知道吗

假设我们可以用这样的东西接近三角形的点

triangle.edges[0].x, 
triangle.edges[0].y, 
triangle.edges[1].x,
etc

然后,我们可以通过首先选择一条边,然后“随机走一段距离到下一条边”来找到任意点:

r = randInt(3) # random integer between 0 and 2
first_edge = triangle.edges[r]
second_edge = r == 2 ? triangle.edges[0] : triangle.edges[r + 1]

## The next lines is kind of pseudo-code
r = randFloat(1)
random_point = (second_edge - first_edge)*r + first_edge 

下一个问题是如何旋转三角形。如果你做过一些代数,你可能会认识到:

def rotatePointAroundOrigin(point, angle):
    new_point = Point()
    new_point.x = cos(angle)*point.x - sin(angle)*point.y
    new_point.y = sin(angle).point.x + cos(angle)*point.y
    return new_point

(见https://en.wikipedia.org/wiki/Rotation_matrix

除此之外,您还需要确定旋转三角形的角度,然后将上述函数应用于所有点。你知道吗

相关问题 更多 >