ホームページ >バックエンド開発 >Python チュートリアル >Python コードは愛の曲線を描きます

Python コードは愛の曲線を描きます

零到壹度
零到壹度オリジナル
2018-04-02 11:09:3715992ブラウズ

Python的拿手好戏是解决数据分析和可视化问题,本篇文章给大家分享的是python代码画出爱心曲线的操作详解,内容挺不错的,希望可以帮助到有需要的朋友。

先不急着画爱心线,来看如何画函数曲线。

 例如,画出指定区间的一个多项式函数:


Python 代码如下:

import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(-4, 4, 1024)
Y = .25 * (X + 4.) * (X + 1.) * (X - 2.)
plt.title('$f(x)=\\frac{1}{4}(x+4)(x+1)(x-2)$')
plt.plot(X, Y, c = 'g')
plt.show()

通过numpy的linspace方法来确定横坐标x的取值范围,列出方程,然后调用matplotlib的pyplot画出函数曲线即可。numpy 是一个用python实现的科学计算包,包括一个强大的N维数组对象Array和成熟的函数库,有用于整合C/C++和Fortran代码的工具包,提供了实用的线性代数、傅里叶变换和随机数生成函数等工具,可以理解成Matlab。

记得中学的时候,我问老师三角函数到底有啥用?(无知者无畏)老师反问我,“如果给了你一块洋铁,怎样才能剪出煤炉烟囱的拐弯呢?”,现在仍然记得老师的这个例子,哪些看似抽象的数学公式,实际上是自己不知道她们的应用场景而已。 


Python代码如下:

import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(0, 2 * np.pi, 100)
YSinValues = np.sin(X)
YCosValues = np.cos(X)
plt.plot(X, YSinValues)
plt.plot(X, YCosValues)
plt.show()

Matplotlib 是一个 Python 的 2D绘图库,甚至可以生成出版质量级别的图形。

对于那些正态分布而言,Python 画起来也就相当简单了:

import numpy as np
import matplotlib.pyplot as plt
def pdf(X, mu, sigma):
    a = 1. / (sigma * np.sqrt(2. * np.pi))
    b = -1. / (2. * sigma ** 2)
    return a * np.exp(b * (X - mu) ** 2)
X = np.linspace(-6, 6, 1000)
for i in range(3):
    samples = np.random.standard_normal(10)
    mu, sigma = np.mean(samples), np.std(samples)
    plt.plot(X, pdf(X, mu, sigma), color = '.66')
plt.plot(X, pdf(X, 0., 1.), color = 'b')
plt.show()

为了不显得单调,这里多画了几条曲线。只要算出方差和均值,从excel中读出哪些数值就可以拟合正态分布了。



回归到主题,关于爱心线,有这样一个凄美的爱情故事。

迩来流浪于吴越,一片闲云空皎洁。

300年以上前、ストックホルムの路上で、落ちぶれたデカルトは、ボロボロの服と数冊の数学の本を含む全財産を持ち、物乞いの生活を送っていました。飄々としたデカルトは、通行人に慈善を求めることもなく、黙って頭を下げ、紙に文字を書き、数学の世界に没頭した。 静かな午後、デカルトはいつものように通りで日向に座って数学の問題を勉強していましたが、行き交う群衆や騒がしい馬車や馬が彼の邪魔をすることはありませんでした。

優雅でエレガントな美しい人がいます。私たちは偶然に出会い、偶然に出会います。

「何をしているの?」 デカルトは振り向くと、スウェーデンの小さな王女、国王のお気に入りの娘ケ・リスティンと同じくらい魅力的な、若くて美しい顔、紺碧の湖の水のような澄んだ目を見た。 彼女はひざまずいて、デカルトの数学の本とメモ用紙を手に取り、彼と話し始めました。会話の中で、彼はこの少女が頭の回転が速く、数学に強い興味を持っていることに気づきました。

数日後、デカルトは思いがけず、王様が彼を小さなお姫様の数学教師として雇ったという通知を受け取りました。疑問に思いながら、デカルトは衛兵を追って宮殿へ向かうと、遠くから銀の鐘のような笑い声が聞こえた。彼はその日街で出会った少女を見て、それ以来王女の数学教師になった。

愛はどこから始まるかわかりませんが、深くなります

デカルトの丁寧な指導のもと、王女の数学は飛躍的に上達し、二人は親密になり始めました。デカルトは彼女に、代数学と幾何学を組み合わせることができる直交座標系を紹介しました。これは、デカルトが後に作成することになる解析幾何学の原型でした。 デカルトの指導のもと、クリスティーヌは座標の素晴らしい世界に入り、曲線に魅了されました。毎日離れられなくなったことで、彼らはお互いに恋に落ちました。

ロマンチックな国スウェーデンでは、純粋で美しい愛が静かに芽生えました。

考えてみると、何千マイルにもわたる霧、夕暮れが沈み、空は広大です。

彼らの熱愛の知らせが王の耳に入ると、王は激怒し、デカルトの処刑を命じました。クリスティーヌの嘆願により、国王は彼を国に追放し、王女は宮殿に軟禁された。

当時、黒死病がヨーロッパ大陸に蔓延していました。デカルトがフランスに帰国して間もなく、重病にかかりました。人生秒読みの日々、彼が昼夜恋しかったのは、街で偶然出会った温かい笑顔だった。彼は毎日彼女に手紙を書き続け、彼女の返事を楽しみにしていました。しかし、これらの手紙は国王によって傍受され、王女は国王から何の知らせも受けませんでした。

自分の心の中にあるものを知りたいなら、お腹の中にある本を読んでください。

  在笛卡尔给克里斯汀寄出第十三封信后,他永远地离开了这个世界。此时,被软禁在宫中的小公主依然徘徊在皇宫的走廊里,思念着远方的情人。    
  这最后一封信上没有写一句话,只有一个方程:r=a(1-sinθ)。   
  国王以为这个方程里隐藏着两个人的秘密,便把全城的数学家召集到皇宫,但是没有人能解开这个函数式。他不忍看着心爱的女儿每天闷闷不乐,便把这封信给了她。拿到信的克里斯汀欣喜若狂,她立即明白了恋人的意图,找来纸和笔,把图形画了出来,一颗心形图案出现在眼前,克里斯泪流满面,这条曲线就是著名的“心形线”。   

        国王去世后,克里斯汀继承王位,便立刻派人去法国寻找心上人的下落,收到的却是笛卡尔去世的消息,留下了一个永远的遗憾……   这封享誉世界的另类情书,据说至今还保存在欧洲笛卡尔的纪念馆里。

这个故事的出处无从知道,网络上流传着各种各样的版本,甚至在百度百科也有着这个故事。后来,有人考证了真实性,认为这是一个美丽的谎言,但并不妨碍人们对爱心线喜爱。

在直角坐标系中,爱心线的方程的python 表达为:x** 2+ y** 2 + a * x= a * sqrt(x** 2+y** 2) 和 x** 2+ y** 2 - a * x= a * sqrt(x** 2+y** 2)通过x 来求对应的y值很麻烦,就像软件设计中的“万能层”那样,可以采用参数方程来表示:

x=a*(2*cos(t)-cos(2*t))
y=a*(2*sin(t)-sin(2*t))

具体的python代码如下:

import numpy as np
import matplotlib.pyplot as plt
a = 1
t = np.linspace(0 , 2 * np.pi, 1024)
X = a*(2*np.cos(t)-np.cos(2*t))
Y = a*(2*np.sin(t)-np.sin(2*t))
plt.plot(Y, X,color='r')
plt.show()

代表爱心的心形线来了: 



但这不是六行代码呀?也不是r=a(1-sinθ)呀? 的确如此,那是极坐标系,python 的matplotlib同样支持极坐标系的,爱心线的六行pyton代码如下:

import numpy as np
import matplotlib.pyplot as plt
T = np.linspace(0 , 2 * np.pi, 1024)
plt.axes(polar = True)
plt.plot(T, 1. - np.sin(T),color="r")
plt.show()

这样,得到的就是封面中的图像了:


心形线确实是爱心满满,如果融入了忧伤会是怎样呢?

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-8 , 8, 1024)
y1 = 0.618*np.abs(x) - 0.8* np.sqrt(64-x**2)
y2 = 0.618*np.abs(x) + 0.8* np.sqrt(64-x**2) 
plt.plot(x, y1, color = 'r')
plt.plot(x, y2, color = 'r')
plt.show()

这样就得到了另一个爱心线: 


インターネット上にも様々な感情が込められた美しいラブラインの実装がたくさんありますが、どれも基本的にはPythonを使って比較的簡単に実装できます。


実際、難しいのはこれらの曲線方程式の表現と、スパイラルなどの実際のアプリケーションシナリオの要件です。




さらに、次のようなさまざまな 3D ビューを描画することもできます。



概要:


データ分析、さらにはビッグデータ処理の最後のステップとして、いわゆる洞察の視覚化である Python は、シンプルで実用的なツールと言えます。

以上がPython コードは愛の曲線を描きますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。