说到心形线不得不提到一个人——勒内·笛卡尔。可以说笛卡尔是心形线的创始人,在笛卡尔游历欧洲各国时,认识了瑞典一个小公国的公主克里斯汀,并成为了公主的数学老师,渐渐地彼此产生了爱慕之心,但是在国王的阻挠下笛卡尔被流放回法国,体弱多病无法抵挡日夜的思念,在给公主寄出十三封信后便与世长辞,第十三封信仅有一个公式,那边是心形线的起源。下面看下各种各样的心形线吧!
1、笛卡尔的心形线
2、另一种广为流传的方程
在几何画板里绘制的图像如下:
3、桃心形
4、实心的心形方程
在几何画板中的图像如下:
需要注意的是要在其中右击图像,属性中绘图加大样本点的数量,并选为离散型更为真实。
5、另外一些心形方程
6、exp618的爱意图像
方程如下:
- Shader
"Custom/love" { -
Properties { -
_MainTex ("Base (RGB)", 2D) = "white" {} -
_Size ("爱心大小", Range(0, 10)) = 1 -
-
} -
-
SubShader { -
Tags {"Queue" = "Transparent"} -
ZWrite Off -
-
Pass { -
CGPROGRAM -
#pragma vertex vert -
#pragma fragment frag -
#include "UnityCG.cginc" -
#pragma target 3.0 -
-
sampler2D _MainTex; -
float _Size; -
-
struct v2f { -
float4 pos:SV_POSITION; -
float4 srcPos : TEXCOORD0; -
}; -
-
v2f vert(appdata_base v) { -
v2f o; -
o.pos = mul (UNITY_MATRIX_MVP, v.vertex); -
// 根据当前顶点计算在屏幕上的位置 -
o.srcPos = ComputeScreenPos(o.pos); -
return o; -
} -
-
fixed4 frag(v2f i) : COLOR0 { -
// 当前顶点在屏幕上的位置,倒置方向 -
float2 center = -1*(i.srcPos.xy/i.srcPos.w); -
float3 col = float3(0); -
-
for(int j = 0; j < 30; j ++) -
{ -
// 求每个点的角度【将圆形变成30边形,计算每个顶点的角度】 -
float an = 6.2831 * float(j) / 30; -
// 求爱心 -
float2 pointPos = float2( -
16 * pow(sin(an), 3), -
13 * cos(an) - 5 * cos(2 * an) - 2 * cos(3 * an) - cos(4 * an) -
); -
// 在UV值域范围上半径大小为【size/_ScreenParams.xy】 -
// 所以新的UV偏移量为【center + pointPos * 单位半径】 -
col = max(col, tex2D(_MainTex, center + pointPos * _Size / _ScreenParams.xy).xyz); -
} -
return fixed4(col, 1); -
} -
ENDCG -
}//end pass -
}// end subshader -
FallBack Off - }