百年回首--关于心形曲线的几种画法

Overview

今天和同学聊到了心形曲线。。刚吃完饭闲着。。。来画一下。

Code

Python
1
2
3
4
5
6
7
8
9
10
11

import numpy as np
import matplotlib.pyplot as plt

a = 5.21
theta = np.linspace(0, 2*np.pi, 100)
r = a*(1 - np.sin(theta))
plt.polar(theta, r)
plt.show()


输出:

Octave/Matlab
1
2
3
4
5
6
7

theta = linspace(0, 2*pi, 100);
r = 5.21*(1-sin(theta));
polar(theta, r)
polar(theta, r)
title('5.21-L')

输出:

R

emmm…由于R好像没有现成的画极座标的东西,所以手动转了下。

1
2
3
4
5
6
7
8
9
10

a <- 5.21
theta <- seq(0, 2*pi, len=100)
r <- a*(1 - sin(theta))

x <- cos(theta)*r
y <- sin(theta)*r
plot(x, y, 'l', col='red')
title('5.21-L')

Cpp

Cpp画图实在是比较伤…用了OpenCV的接口才勉强能看…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

#include <math.h>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>

using namespace std;

void PlotCurve(double a=5.21){
cv::Mat image = cv::Mat(300, 300, CV_8U, cv::Scalar(255, 255, 255));
double theta0 = 0;
while(theta0 <= 2*M_PI){
double r0 = a*(1-sin(theta0));
cv::Point p = cv::Point(cos(theta0)*r0*10+150, 300-(sin(theta0)*r0*10+200));
cv::circle(image, p, 1, cv::Scalar(0, 0, 0),-1);
theta0 += 2*M_1_PI/100;
}
cv::imshow("5.21-L", image);
cv::waitKey(0);
};

int main(){
PlotCurve();
return 0;
}


嗯,就这些吧,Haskell还是不碰的好:-)…其他的语言也不会了orz…

SAS

========2017.9.23更==============

感觉SAS这货的做的图也是很不错…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

DATA heart;
a = 0.521;
pi = 3.1415926;
theta = 0;
r = 0;
x=0;
y=0;
do i=1 to 101;
theta = theta + pi/50;
r = a*(1-sin(theta));
x = r*cos(theta);
y = r*sin(theta);
output;
end;
RUN;

PROC gplot data=heart;
symbol v=none i=spline c=red;
title 'My Heart';
plot y*x;
RUN;

图。。忘记保存了…放个照片先..

本文标题:百年回首--关于心形曲线的几种画法

文章作者:不秩稚童

发布时间:2017年08月16日 - 13:15:20

最后更新:2017年09月23日 - 17:51:31

原始链接:http://datahonor.com/2017/08/16/百年回首-关于心型曲线的几种画法/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

击蒙御寇