You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

311 lines
8.2 KiB
C#

1 month ago
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Mesnac.Maths;
namespace Mesnac.Math.New
{
public class Straight : IMath
{
private object NullResult = null;
public string Name
{
get { return "直线"; }
}
public string Caption
{
get
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("生成从第一个值开始第二个值结束的int类型数据");
sb.AppendLine("例:");
sb.Append(" ").Append(Name).AppendLine("(11,20)");
return sb.ToString();
}
}
public object Execute(string[] parameters, object[] buff)
{
if (buff.Length == 0)
{
return this.NullResult;
}
if (buff[0] == null)
{
return this.NullResult;
}
int index = 0;
if (!int.TryParse(buff[0].ToString(), out index))
{
return this.NullResult;
}
if (parameters.Length < 2)
{
return this.NullResult;
}
int iStart = 0;
int iEnd = 0;
if (!int.TryParse(parameters[0], out iStart))
{
return this.NullResult;
}
if (!int.TryParse(parameters[1], out iEnd))
{
return this.NullResult;
}
if (iEnd == iStart)
{
return iStart;
}
if (iEnd > iStart)
{
iStart = iStart - 1;
}
else
{
iStart = iStart + 1;
}
int iLen = System.Math.Abs(iEnd - iStart);
int Result = index;
if (Result > iLen)
{
Result = Result % iLen;
if (Result == 0)
{
Result = iLen;
}
}
if (iEnd > iStart)
{
return iStart + Result;
}
else
{
return iStart - Result;
}
}
}
public class BrokenLine : IMath
{
private object NullResult = null;
public string Name
{
get { return "折线"; }
}
public string Caption
{
get
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("生成从第一个值开始到达第二个值后返回第一个值结束的int类型数据");
sb.AppendLine("例:");
sb.Append(" ").Append(Name).AppendLine("(11,20)");
return sb.ToString();
}
}
public object Execute(string[] parameters, object[] buff)
{
if (buff.Length == 0)
{
return this.NullResult;
}
if (buff[0] == null)
{
return this.NullResult;
}
int index = 0;
if (!int.TryParse(buff[0].ToString(), out index))
{
return this.NullResult;
}
if (parameters.Length < 2)
{
return this.NullResult;
}
int iStart = 0;
int iEnd = 0;
if (!int.TryParse(parameters[0], out iStart))
{
return this.NullResult;
}
if (!int.TryParse(parameters[1], out iEnd))
{
return this.NullResult;
}
if (iEnd == iStart)
{
return iStart;
}
if (iEnd > iStart)
{
iStart = iStart - 1;
}
else
{
iStart = iStart + 1;
}
int iLen = System.Math.Abs(iEnd - iStart) * 2 - 2;
int Result = index;
if (Result > iLen)
{
Result = Result % iLen;
if (Result == 0)
{
Result = iLen;
}
}
if (iEnd > iStart)
{
Result = iStart + Result;
if (Result > iEnd)
{
Result = iEnd - (Result - iEnd);
}
}
else
{
Result = iStart - Result;
if (Result < iEnd)
{
Result = iEnd + iEnd - Result;
}
}
return Result;
}
}
public class Random : IMath
{
private object NullResult = null;
private static System.Random random = new System.Random((int)DateTime.Now.Ticks + +System.Threading.Thread.CurrentThread.ManagedThreadId);
public string Name
{
get { return "随机数"; }
}
public string Caption
{
get
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("产生一个两个参数之间的double类型的随机数");
sb.AppendLine("例:");
sb.Append(" ").Append(Name).AppendLine("(11,20)");
return sb.ToString();
}
}
public object Execute(string[] parameters, object[] buff)
{
if (buff.Length == 0)
{
return this.NullResult;
}
if (buff[0] == null)
{
return this.NullResult;
}
int index = 0;
if (!int.TryParse(buff[0].ToString(), out index))
{
return this.NullResult;
}
if (parameters.Length < 2)
{
return 0;
}
double iStart = 0;
double iEnd = 0;
if (!double.TryParse(parameters[0], out iStart))
{
return this.NullResult;
}
if (!double.TryParse(parameters[1], out iEnd))
{
return this.NullResult;
}
random.NextDouble();
double d = random.NextDouble();
return d * (iEnd - iStart) + iStart;
}
}
public class RandomInt : IMath
{
private object NullResult = null;
private static System.Random random = new System.Random((int)DateTime.Now.Ticks + System.Threading.Thread.CurrentThread.ManagedThreadId);
public string Name
{
get { return "整数随机数"; }
}
public string Caption
{
get
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("产生一个两个参数之间的int类型的随机数");
sb.AppendLine("例:");
sb.Append(" ").Append(Name).AppendLine("(11,20)");
return sb.ToString();
}
}
public object Execute(string[] parameters, object[] buff)
{
if (buff.Length == 0)
{
return this.NullResult;
}
if (buff[0] == null)
{
return this.NullResult;
}
int index = 0;
if (!int.TryParse(buff[0].ToString(), out index))
{
return this.NullResult;
}
if (parameters.Length < 2)
{
return 0;
}
int iStart = 0;
int iEnd = 0;
if (!int.TryParse(parameters[0], out iStart))
{
return this.NullResult;
}
if (!int.TryParse(parameters[1], out iEnd))
{
return this.NullResult;
}
random.Next();
int result = 0;
if (iStart == iEnd)
{
result = iStart;
}
if (iStart > iEnd)
{
result = random.Next(iEnd, iStart);
}
result = random.Next(iStart, iEnd);
return result;
}
}
}