最近几天为了准备秋招笔试,刷了很多题,因此我决定把一些遇到的数学题,和图形学中用到的一些数学内容记录到这里,便于查找,也便于理解。
相邻三个整数之间的关系
假设三个整数分别表示为
n
−
1
,
n
,
n
+
1
n-1,n,n+1
n−1,n,n+1,则有关系:
(
n
−
1
)
∗
(
n
+
1
)
=
n
2
−
1
(n-1)*(n+1)=n^2-1
(n−1)∗(n+1)=n2−1比如数字7,8,9,则有关系
8
∗
8
−
1
=
63
=
79
8*8-1=63=79
8∗8−1=63=79;
**注意:**此处的整数可以是任意正负整数。
证明如下:
n
2
=
(
(
n
−
1
)
+
1
)
∗
(
(
n
+
1
)
−
1
)
n^2 = \bigl((n-1)+1\bigl)*\bigl((n+1)-1\bigl)
n2=((n−1)+1)∗((n+1)−1)
=
(
n
−
1
)
∗
(
n
+
1
)
+
(
n
+
1
)
−
(
n
−
1
)
−
1
=
(
n
−
1
)
∗
(
n
+
1
)
+
1
=(n-1)*(n+1)+(n+1)-(n-1)-1=(n-1)*(n+1)+1
=(n−1)∗(n+1)+(n+1)−(n−1)−1=(n−1)∗(n+1)+1**证毕。
空间内某一点到某一简单几何体表面的距离
这一部分都使用HLSL语法来表示,因为HLSL语法简单容易理解;
这一部分常用于ray matching算法中,用来计算distance field;
若点在几何体内部,则点到几何体表面的距离我们也进行了计算;
-
点p到球面的距离:
float3 p = {x,y,z}; //点p float4 s = {centerX,centerY,centerZ,redius}; //球体 float dist = abs(distance(p, s.xyz) - s.w); //点P到球面的距离
证明就省去了吧,毕竟挺简单的==,就是计算点到球心的距离,再减去球体的半径求绝对值得到的。
-
点p到长方体的距离:
float3 p = {x,y,z}; //点p float3 rectCen = {centerX,centerY,centerZ}; //长方体中心 float3 rectLen = {a,b,c}; //长方体半边长 float3 tmp = abs(p - rectCen) - rectLen; //辅助数据 float dist = length(max(tmp, float3(0)) + max(min(-tmp.x,min(-tmp.y, -tmp.z)), 0);
length(max(tmp, float3(0))
表示点p位于长方体外时p到长方体的距离(若p在内部则为0),max(min(-tmp.x,min(-tmp.y, -tmp.z)), 0)
表示点p位于长方体内时p到长方体的距离(若p在外部则为0);