簡體   English   中英

如何使用Python曲線在x和n之間生成數字?

[英]How can I generate numbers between x and n with a curve with Python?

我試圖在兩個整數之間生成非線性曲線,假設0和25匹配此曲線:

在此輸入圖像描述

這似乎是一個愚蠢的簡單問題,我需要的曲線甚至看起來像一個圓圈的一部分,所以生成一個大圓圈,並采取右下角的點將解決這個問題,但我不知道如何做任何這個。

我需要的是一個從0到25的列表,曲線作為該列表的一部分,如果這是有道理的。 開始慢慢增加,然后加速,然后在接近結束時放慢速度。

我嘗試了類似的結果,但它不是精確的角度/曲線。

x=[]
y=range(25)

for i in range(25):
    x.append((i**.25)**2)

plt.plot(x, y)
plt.show()

在此輸入圖像描述

謝謝

如果你真的想擁有相同的曲線,可以加載繪圖圖像,並使用PIL獲取每個藍色像素:

from urllib.request import urlopen
from PIL import Image

img = Image.open(urlopen('https://i.stack.imgur.com/NpiMq.png'))
X = []
Y = []
for x in range(img.size[0]):
    for y in range(img.size[1]):
        r, g, b, a = img.getpixel((x, y))
        if b > r and b > g:
            X.append(x)
            Y.append(y)

然后,知道圖中的(0,20)是像素(63,355),並且圖中的(25,160)是像素(516,32),您可以將像素坐標轉換為數據點:

X = [(x - 63) * (25 - 0) / (516 - 63) + 0 for x in X]
Y = [(y - 355) * (160 - 20) / (32 - 355) + 20 for y in Y]

最后,您可以使用numpy polyfit來獲得與先前獲得的點的多項式擬合:

>>> np.polyfit(X, Y, 3)
[ 8.23918277e-03 -7.33330644e-02  2.60046715e+00  2.03012850e+01]

然后,使用poly1d繪制結果以獲取給定x值返回其y值的函數:

import numpy as np
from matplotlib import pyplot as plt

x2y = np.poly1d(np.polyfit(X, Y, 3))
new_X = [x / 10 for x in range(250)]
new_Y = [x2y(x) for x in new_X]
plt.plot(new_X, new_Y)
plt.show()

輸出圖

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM