> 백엔드 개발 > 파이썬 튜토리얼 > Python 코드는 사랑의 곡선을 그립니다.

Python 코드는 사랑의 곡선을 그립니다.

零到壹度
풀어 주다: 2018-04-02 11:09:37
원래의
15996명이 탐색했습니다.

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 코드는 사랑의 곡선을 그립니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿