Maison > développement back-end > Tutoriel Python > Le code Python dessine une courbe d'amour

Le code Python dessine une courbe d'amour

零到壹度
Libérer: 2018-04-02 11:09:37
original
15995 Les gens l'ont consulté

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()
Copier après la connexion

通过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()
Copier après la connexion

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()
Copier après la connexion

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



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

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

Il y a plus de 300 ans, dans les rues de Stockholm, Descartes, un pauvre, menait une vie de mendiant, avec tous ses biens, notamment des vêtements en lambeaux et quelques livres de mathématiques, avec lui. Descartes, distant, ne demandait pas la charité aux passants, mais baissait silencieusement la tête et écrivait et dessinait sur le papier, immergé dans son monde mathématique. Par un après-midi tranquille, Descartes était assis au soleil dans la rue, comme d'habitude, étudiant des problèmes mathématiques. Les foules qui passaient et les voitures et les chevaux bruyants ne pouvaient pas le gêner.

Il y a une belle personne, gracieuse et élégante. On se rencontre par hasard, et on se rencontre par hasard.

"Qu'est-ce que tu fais ?" En tournant la tête, Descartes aperçut un visage jeune et beau, une paire d'yeux clairs comme l'eau d'un lac azur, si charmante et charmante. . Christine, la fille préférée du roi. Elle s'agenouilla, prit le livre de mathématiques et le papier brouillon de Descartes et commença à lui parler. Au cours de la conversation, il a découvert que cette petite fille avait une réflexion vive et un fort intérêt pour les mathématiques.

Quelques jours plus tard, Descartes reçut de manière inattendue un avis l'informant que le roi l'avait engagé pour être le professeur de mathématiques de la petite princesse. Plein de doutes, Descartes suivit les gardes jusqu'au palais. Il entendit de loin un rire en forme de cloche d'argent. Il a vu la fille qu'il a rencontrée dans la rue ce jour-là, et dès lors, il est devenu le professeur de mathématiques de la princesse.

Je ne sais pas où l'amour a commencé, mais il va plus profondément

Les mathématiques de la princesse se sont améliorées à pas de géant sous la prudence de Descartes conseils, et la relation entre eux a également commencé à se développer. Descartes lui a fait découvrir le système de coordonnées rectangulaires, qui permettait de combiner l'algèbre et la géométrie, qui était le prototype de la géométrie analytique que Descartes créerait plus tard. Sous la direction de Descartes, Christine entre dans le monde merveilleux des coordonnées et devient fascinée par les courbes. Être inséparables au quotidien les a également fait tomber amoureux l'un de l'autre. ​

En Suède, pays romantique, un amour pur et beau a tranquillement germé. ​

À des milliers de kilomètres, le ciel est vaste et brumeux.

Lorsque la nouvelle de leur histoire d'amour parvint aux oreilles du roi, celui-ci fut furieux et ordonna l'exécution de Descartes. À la demande de Christine, le roi l'exila dans son pays et la princesse fut assignée à résidence au palais.

A cette époque, la peste noire se propageait sur tout le continent européen. Peu de temps après son retour en France, Descartes tombe gravement malade. Pendant les jours où sa vie comptait à rebours, ce qui lui manquait jour et nuit, c'était le visage chaleureux et souriant qu'il rencontrait par hasard dans la rue. Il n'arrêtait pas de lui écrire tous les jours, attendant avec impatience sa réponse. Cependant, ces lettres furent interceptées par le roi, et la princesse ne reçut jamais de nouvelles de lui. ​

Si vous voulez savoir ce qui se passe dans votre cœur, lisez le livre dans votre ventre

.

  在笛卡尔给克里斯汀寄出第十三封信后,他永远地离开了这个世界。此时,被软禁在宫中的小公主依然徘徊在皇宫的走廊里,思念着远方的情人。    
  这最后一封信上没有写一句话,只有一个方程: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))
Copier après la connexion

具体的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()
Copier après la connexion

代表爱心的心形线来了: 



但这不是六行代码呀?也不是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()
Copier après la connexion

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


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

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()
Copier après la connexion

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


Il existe diverses belles implémentations de lignes d'amour sur Internet, et elles sont également pleines d'émotions diverses, mais pour chacune d'elles, en gros, elles peuvent être implémentées relativement simplement en utilisant python.


En fait, le dessin est très simple, c'est l'expression de ces équations de courbe et les exigences réelles du scénario d'application. , comme Spirale.




En outre, Vous pouvez également dessiner diverses vues 3D, telles que :





Résumé :

En tant que dernier maillon de l'analyse des données et même du traitement du Big Data, il s'agit de ce qu'on appelle la visualisation des informations, et python peut être dit être l’un d’entre eux. Outil simple et pratique.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal