<p>好吧,开始这一切的详细的长b都在长线之下。答案就在这里。在</p>
<p>静态点是x,y坐标,x值和y值放在不同的数组中(分别是coorarx和coorary),确保永远不要使用值imgx或imy。在</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
import random
from PIL import Image, ImageDraw
imgx = 500
imgy = 500
image = Image.new("RGB", (imgx, imgy))
draw = ImageDraw.Draw(image)
def B(coorArr, i, j, t):
if j == 0:
return coorArr[i]
return B(coorArr, i, j - 1, t) * (1 - t) + B(coorArr, i + 1, j - 1, t) * t
# n = random.randint(3, 6) # number of control points
n=4
#coorArrX = []
#coorArrY = []
#for k in range(n):
# x = random.randint(0, imgx - 1)
# y = random.randint(0, imgy - 1)
# coorArrX.append(x)
# coorArrY.append(y)
coorArrX=[3,129,12,77]
coorArrY=[128,52,12,491]
# plot the curve
numSteps = 10000
for k in range(numSteps):
t = float(k) / (numSteps - 1)
x = int(B(coorArrX, 0, n - 1, t))
y = int(B(coorArrY, 0, n - 1, t))
try:
image.putpixel((x, y), (0, 255, 0))
except:
pass
# plot the control points
cr = 3 # circle radius
for k in range(n):
x = coorArrX[k]
y = coorArrY[k]
try:
draw.ellipse((x - cr, y - cr, x + cr, y + cr), (255, 0, 0))
except:
pass
image.show()
</code></pre>
<p>==
我也是一个新来的人,我拒绝像你一样去看这个…一个学习的经验。在</p>
<p>但是当我看到这个代码时,我看到了一些奇怪的东西</p>
^{pr2}$
<p>你确定这部分是正确的吗?imgx在其他地方定义为500,n为4。
所以这可以理解为</p>
<pre><code>for k in range(4):
x = (0, 500 - 1)
y = (0, 500 - 1)
</code></pre>
<p>这(因为这些值在本规范中从未改变)意味着:</p>
<pre><code>x = (0, 499)
y = (0, 499)
</code></pre>
<p>每次传球。
所以每次他们到达:</p>
<pre><code>coorArrX.append(x)
coorArrY.append(y)
</code></pre>
<p>它们只是不断地向数组中添加相同数据的新副本,所以当它完成时,数组看起来是这样的(内部)</p>
<pre><code>[(0, 499), (0, 499), (0, 499), (0,499)]
</code></pre>
<p>更让人困惑的是coorarx和coorary是A)相同的,和B)在它们的基本部分相同(即每个元素都是相同的)。因此,当您进入代码的这一部分时:</p>
<pre><code># plot the control points
cr = 3 # circle radius
for k in range(n):
x = coorArrX[k]
y = coorArrY[k]
try:
draw.ellipse((x - cr, y - cr, x + cr, y + cr), (255, 0, 0))
except:
pass
</code></pre>
<p>在数组的值中进行替换,得到:</p>
<pre><code># plot the control points
cr = 3 # circle radius
for k in range(n):
x = coorArrX[k]
y = coorArrY[k]
try:
draw.ellipse(((0, 499) - 3, (0, 499) - 3, (0, 499) + 3, (0, 499) + 3), (255, 0, 0))
except:
pass
</code></pre>
<p>现在这是控制绘制曲线图的部分,但是我不明白在那些不可能的坐标集中,elispe怎么能画出任何东西?!在</p>
<p>故障并进行了复制粘贴测试。<strike>这段代码纯粹是假的,要么是为了欺骗人们浪费时间,要么是因为同样的原因放在OP发现它的地方。</strike></p>
<p>但尝试是很有趣的!!在</p>