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#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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;
}
}
}