Koch
使用 golang 绘制一个科赫曲线(Koch)雪花。
科赫曲线 1
给定线段 AB,科赫曲线可以由以下步骤生成:
- 将线段分成三等份:AC,CD,DB
- 以 CD 为底,向外(内外随意)画一个等边三角形 DMC
- 将线段 CD 移除
- 分别对 AC,CM,MD,DB 重复 1~3。
科赫雪花是以等边三角形三边生成的科赫曲线组成的。
等边三角形
想要完成该曲线的生成首先要解决一个几何问题,如何通过两点坐标求出等边三角形第三个顶点坐标,数学有很多种解法,可是如何变成代码呢?
查到有人总结了一个万能公式2:
对于任意两个不同点 A 和 B,A 绕 B 逆时针旋转 θ 角度后 C 坐标为:
$$
\begin{cases}
x = |x_A-x_B| \times \cosθ - |y_A-y_B| \times \sinθ + x_B \\
y = |y_A-y_B| \times \cosθ + |x_A-x_B| \times \sinθ + y_B
\end{cases}
$$
而等边三角形已知 θ 角为 60 度。
具体的推导过程请移步原博文。
实现
下面是用 golang 实现的 Koch 函数,其中 line
为两点画一条直线,line_len
为计算直线的长度。
1 |
|
测试
绘制一片科赫雪花。
1 |
|
结果:
Koch
https://wishlily.github.io/article/code/2017/03/21/undefined/