Beispiel #1
0
		/// <summary>
		/// 分三阶段的插值
		/// </summary>
		/// <param name="t"> 单位化的时间, 即取值范围为 [0, 1] </param>
		/// <param name="t1"> 第一个时间点 </param>
		/// <param name="t2"> 第二个时间点 </param>
		/// <param name="interpolate"> 一个在 [0, 1] 上的插值方法 </param>
		/// <returns> [0, t1) 返回插值方法前一半,(t2, 1] 返回插值方法后一半,[t1, t2] 返回 0.5 处的值 </returns>
		public static float InterpolateInThreePhases(
			float t,
			float t1,
			float t2,
			Func<float, float> interpolate)
		{
			if (t2 < t1) Kit.Swap(ref t1, ref t2);

			if (t < t1) return interpolate(t / t1 * 0.5f);

			if (t > t2) return interpolate((t - t2) / (1.0f - t2) * 0.5f + 0.5f);

			return interpolate(0.5f);
		}
Beispiel #2
0
		/// <summary>
		/// 返回一个指定范围内的随机整数
		/// </summary>
		/// <param name="minValue"> 返回的随机数的下界(包含) </param>
		/// <param name="maxValue"> 返回的随机数的上界(不包含) </param>
		/// <returns> [minValue, maxValue) 范围的均匀分布随机数 </returns>
		public int Range(int minValue, int maxValue)
		{
			if (minValue > maxValue) Kit.Swap(ref minValue, ref maxValue);
			return minValue + (int)((maxValue - minValue) * Range01());
		}
Beispiel #3
0
		/// <summary>
		/// 确保最小最大值关系正确
		/// </summary>
		public void OrderMinMax()
		{
			if (min > max) Kit.Swap(ref min, ref max);
		}
Beispiel #4
0
		/// <summary>
		/// 返回一个指定范围内的随机浮点数
		/// </summary>
		/// <param name="minValue"> 返回的随机数的下界(包含) </param>
		/// <param name="maxValue"> 返回的随机数的上界(不包含) </param>
		/// <returns> [minValue, maxValue) 范围的均匀分布随机数 </returns>
		public float Range(float minValue, float maxValue)
		{
			if (minValue > maxValue) Kit.Swap(ref minValue, ref maxValue);
			return minValue + (maxValue - minValue) * (float)Range01();
		}