<p>从您的描述来看,唯一的问题似乎是关于Python基础知识的。我将代码重新排列如下,因此只需要在底部进行操作。现在,如果您想手动指定4个控制点,请继续执行此操作(在下面的代码中,我自己指定了4个作为示例)。您需要理解的是,在原始代码中,<code>coorArrX</code>和{<cd2>}只是一个列表,每个列表包含4个点(分别是x和y坐标)。如果您是手动指定它们,那么使用循环来编写它们是没有意义的。我希望这个代码足够清楚:</p>
<pre><code># Random Bezier Curve using De Casteljau's algorithm
# http://en.wikipedia.org/wiki/Bezier_curve
# http://en.wikipedia.org/wiki/De_Casteljau%27s_algorithm
# FB - 201111244
from PIL import Image, ImageDraw
def plot_curve(image, px, py, steps=1000, color=(0, 255, 0)):
def B(coord, i, j, t):
if j == 0:
return coord[i]
return (B(coord, i, j - 1, t) * (1 - t) +
B(coord, i + 1, j - 1, t) * t)
img = image.load()
for k in range(steps):
t = float(k) / (steps - 1)
x = int(B(px, 0, n - 1, t))
y = int(B(py, 0, n - 1, t))
try:
img[x, y] = color
except IndexError:
pass
def plot_control_points(image, px, py, radi=3, color=(255, 0, 0)):
draw = ImageDraw.Draw(image)
for x, y in zip(px, py):
draw.ellipse((x - radi, y - radi, x + radi, y + radi), color)
# Your fixed, manually specified, points.
n = 4
coord_x = [25, 220, 430, 410]
coord_y = [250, 10, 450, 40]
image = Image.new("RGB", (500, 500))
plot_curve(image, coord_x, coord_y)
plot_control_points(image, coord_x, coord_y)
image.save("BezierCurve.png")
</code></pre>