说到心形线不得不提到一个人——勒内·笛卡尔。可以说笛卡尔是心形线的创始人,在笛卡尔游历欧洲各国时,认识了瑞典一个小公国的公主克里斯汀,并成为了公主的数学老师,渐渐地彼此产生了爱慕之心,但是在国王的阻挠下笛卡尔被流放回法国,体弱多病无法抵挡日夜的思念,在给公主寄出十三封信后便与世长辞,第十三封信仅有一个公式,那边是心形线的起源。下面看下各种各样的心形线吧!

1、笛卡尔的心形线

笛卡尔心形线

2、另一种广为流传的方程

另一个广为流传的公式

在几何画板里绘制的图像如下:

heart几何画板

3、桃心形

桃心形

4、实心的心形方程

在几何画板中的图像如下:

需要注意的是要在其中右击图像,属性中绘图加大样本点的数量,并选为离散型更为真实。

实心的心形方程

 5、另外一些心形方程

other1

other2

many

6、exp618的爱意图像

iou

方程如下:

ious


  1. Shader "Custom/love" {  
  2.     Properties {   
  3.         _MainTex ("Base (RGB)", 2D) = "white" {}  
  4.         _Size ("爱心大小", Range(0, 10)) = 1  
  5.   
  6.     }   
  7.        
  8.     SubShader {      
  9.         Tags {"Queue" = "Transparent"}        
  10.         ZWrite Off  
  11.   
  12.         Pass {       
  13.             CGPROGRAM       
  14.             #pragma vertex vert  
  15.             #pragma fragment frag       
  16.             #include "UnityCG.cginc"  
  17.             #pragma target 3.0     
  18.          
  19.             sampler2D _MainTex;   
  20.             float _Size;  
  21.            
  22.             struct v2f {       
  23.                 float4 pos:SV_POSITION;       
  24.                 float4 srcPos : TEXCOORD0;    
  25.             };     
  26.      
  27.             v2f vert(appdata_base v) {     
  28.                 v2f o;     
  29.                 o.pos = mul (UNITY_MATRIX_MVP, v.vertex);     
  30.                 // 根据当前顶点计算在屏幕上的位置  
  31.                 o.srcPos = ComputeScreenPos(o.pos);    
  32.                 return o;  
  33.             }     
  34.      
  35.             fixed4 frag(v2f i) : COLOR0 {  
  36.                 // 当前顶点在屏幕上的位置,倒置方向
  37.                 float2 center = -1*(i.srcPos.xy/i.srcPos.w);    
  38.                 float3 col = float3(0);  
  39.           
  40.                 for(int j = 0; j < 30; j ++)  
  41.                 {  
  42.                     // 求每个点的角度【将圆形变成30边形,计算每个顶点的角度】  
  43.                     float an = 6.2831 * float(j) / 30;  
  44.                     // 求爱心  
  45.                     float2 pointPos = float2(  
  46.                     16 * pow(sin(an), 3),  
  47.                     13 * cos(an) - 5 * cos(2 * an) - 2 * cos(3 * an) - cos(4 * an)  
  48.                      );  
  49.                     // 在UV值域范围上半径大小为【size/_ScreenParams.xy】  
  50.                     // 所以新的UV偏移量为【center + pointPos * 单位半径】  
  51.                     col = max(col, tex2D(_MainTex, center + pointPos * _Size / _ScreenParams.xy).xyz);  
  52.                 }  
  53.                 return fixed4(col, 1);   
  54.             }    
  55.             ENDCG    
  56.         }//end pass  
  57.     }// end subshader  
  58.     FallBack Off     
  59. } 

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐