绘制heart-shaped心形曲线
上网突然查到某水饮的广告,原来讲述的是一个很凄美的爱情传输——笛卡尔和瑞典公主的爱情故事。
可终于弄懂那个很含蓄的广告了。
然后发现了笛卡尔心形曲线这个好玩的东西。就上网查了查,还是有很多好玩的介绍和示例的。
数学这门科学,我觉得还是很深奥的,但是我确实是还给老师了都。
所以函数曲线这些算法,是真的不行了。
只能是参考网上的资料学习一下。
Cardioid-心脏线
心脏线,又称心形线,是有一个尖点的外摆线。也就是说,一个圆沿着另一个半径相同的圆滚动时,圆上一点的轨迹就是心脏线。(参考Cardioid - Wikipedia)

笛卡尔心形公式
笛卡尔心形公式:r=a(1-sinθ)
通过python代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import numpy as np import matplotlib.pyplot as plt
def plot_cardioid(a): theta = np.linspace(0, 2 * np.pi, 1000) r = a * (1 - np.sin(theta)) x = r * np.cos(theta) y = r * np.sin(theta)
plt.figure(figsize=(8, 8)) plt.plot(x, y) plt.axis('equal') plt.title(f'Cardioid: r = {a}(1 - sinθ)') plt.xlabel('x') plt.ylabel('y') plt.grid(True) plt.show() # 绘制r=a(1-sinθ)曲线,其中a=1 plot_cardioid(1)
|
呈现效果:

更接近心形的曲线
找了些更接近心形的曲线,挺好看挺好看:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import numpy as np import matplotlib.pyplot as plt
def plot_heart_curve(): x = np.linspace(-2, 2, 500) y = np.linspace(-2, 2, 500) X, Y = np.meshgrid(x, y) Z = (X**2 + Y**2 - 1)**3 - X**2 * Y**3
plt.figure(figsize=(8, 8)) plt.contour(X, Y, Z, [0], colors='red') plt.axis('equal') plt.title('Heart Curve: (x^2 + y^2 - 1)^3 - x^2y^3 = 0') plt.xlabel('x') plt.ylabel('y') plt.grid(True) plt.show()
# 绘制函数曲线 (x^2+y^2-1)^3-x^2y^3=0 plot_heart_curve()
|

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import numpy as np import matplotlib.pyplot as plt
t = np.linspace(0, 2 * np.pi, 1000) a = 16 * np.sin(t)**3 b = 13 * np.cos(t) - 5 * np.cos(2*t) - 2 * np.cos(3*t) - np.cos(4*t) x = a y = b
plt.figure(figsize=(8, 8)) plt.plot(x, y) plt.axis('equal') plt.title('Closest Heart-Shaped Curve') plt.xlabel('x') plt.ylabel('y') plt.grid(True) plt.show()
|

Author:
Konta
Discuss:
吐槽及留言
Permalink:
http://tech.hahaalot.com/2023/05/10/cardioid-curve/
License:
Copyright (c) 2020 CC-BY-NC-4.0 LICENSE
Slogan:
YOLO!