苹果手机投票刷票软件代码是怎么写的?

投票教程 admin 0浏览

苹果手机投票刷票软件代码是怎么写的?

现在手机对于大家来说是生活当中必不可或缺的,不论走到哪里手机必须是带在身上的,手机可以为我们解决很多事情,打电话,付钱,打车,等等都可以,那么手机如此普及的情况之下,刷票自然也可以通过手机来操作了,这也就是我今天要说的苹果手机投票刷票软件代码怎么写的原因,现在很多人都想要刷票,那么如果可以通过手机来进行刷票岂不是更完美,那么下面大家来看苹果手机投票刷票软件的代码是怎么写的吧

苹果手机投票刷票软件代码是怎么写的?

思路:

通过HTTpWebRequest来获取投票主页面cookie,并且通过这个cookie来访问验证码页面得到验证码,得到验证码 通过灰度化,去噪,取有效区域,最后二值化常规步骤,最后和预存的字符匹配,得到验证码,然后蒋验证码 cookie一起发到投票处理页面,可以通过IE跟踪找到,不在具体描述,最后HTTPWEBReaponse中把返回的cookie设置成过期即可。我这个网址验证码做的比较简单,这么做可以搞定,当然比较复杂的验证码最好还是通过openCV来处理。好了,不说了,直接贴代码。

心得:复习了下winform开发中多线程对控件的访问,采用委托来解决的,好久不用,生疏了好多。。。。。。

复习了session和cookie在web开发中的使用

复习了简单的验证码识别。负责的由于时间关系,米升入下去,以后有机会在研究研究

核心代码

private delegate void FlushClient();//代理

private CookieContainer cc;

private CookieContainer cc_Req;

private void ThreadFunction()

{

if (this.textBox1.InvokeRequired || this.textBox2.InvokeRequired || this.textBox3.InvokeRequired || label2.InvokeRequired)//等待异步

{

FlushClient fc = new FlushClient(ThreadFunction);

this.Invoke(fc);//通过代理调用刷新方法

}

else

{

label2.Text = FlushState;

label10.Text = checkMessage;

textBox3.Text = FlushResult;

textBox1.Text = n_success.ToString();//从返回的内容里找出票数

textBox2.Text = n_fail.ToString();

}

}

private void InitUserCookie()

{

cc = new CookieContainer();

string url = “http://www.toutoupiao.com/showvote-6811.html”;

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);

req.CookieContainer = cc;

HttpWebResponse response = (HttpWebResponse)req.GetResponse();

cc.Add(response.Cookies);

cc_Req = req.CookieContainer;

}

private Image GetCheckImage()

{

HttpWebRequest reqCheck = (HttpWebRequest)WebRequest.Create(checkURL);

reqCheck.CookieContainer = cc_Req;

reqCheck.Timeout = 5000;

HttpWebResponse repCheck = (HttpWebResponse)reqCheck.GetResponse();

System.Drawing.Image img;

img = new System.Drawing.Bitmap(repCheck.GetResponseStream());

return img;

}

private string GetCheckMessage()

{

Image numPic = GetCheckImage(); // 得到验证码图片

pictureBox1.Image = numPic;

unCodeAiYing UnCheckobj = new unCodeAiYing((Bitmap)numPic);

string strNum = UnCheckobj.getPicnum();     //识别图片

return strNum;

}

private HttpWebRequest CreatHttp()

{

rnd = new Random();

checkMessage = GetCheckMessage();

string rndstr = rnd.NextDouble().ToString();//这是模仿QueryString里那个随机数的,没有估计也不影响结果

string url = “http://www.toutoupiao.com/brushvote.asp?action=ajax_sendvote_more&vote_id=6811&item_id=25829&check_code=” + checkMessage + “&_=” + rndstr;

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);

req.CookieContainer = cc;

req.Method = “GET”;

req.UserAgent = “Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36”;

//req.UserAgent = “Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)”;

req.Timeout = m;

req.Referer = “http://www.toutoupiao.com/showvote-6811.html”;

req.KeepAlive = true;

req.Headers.Add(“x-requested-with”, “XMLHttpRequest”);

return req;

}

private void Go()

{

HttpWebRequest req = CreatHttp();

try

{

var res = req.GetResponse() as HttpWebResponse;

Stream st = res.GetResponseStream();//读取Response

StreamReader sr = new StreamReader(st);

string result = sr.ReadToEnd().ToString();

if (res.Cookies.Count != 0)

res.Cookies[“6811”].Expires = DateTime.Now.AddDays(-2);

if (result == error_str)

{

n_fail++;

}

if (result.Contains(“成功”))

{

n_success++;

}

FlushResult = result + rnd.Next(1000).ToString();

FlushState = “刷票进行中…”;

}

catch (WebException e)

{

FlushState = e.ToString();

n_fail++;

}

catch (System.ObjectDisposedException e)

{

FlushState = e.ToString();

n_fail++;

}

finally

{

ThreadFunction();

}

}

unCodeAiYing.cs代码

using System;

using System.Collections.Generic;

using System.Text;

using System.Drawing;

using Ocr;

namespace BallotAiying2

{

class unCodeAiYing : UnCodebase

{

//字符表 顺序为0..9,A..Z,a..z

//        string[] CodeArray = new string[] {

//”001100010010100001100001100001100001100001100001010010001100″,

//”00100011001010000100001000010000100001000010011111″,

//”011110100001100001000001000110001000010000100000100000111111″,

//”011110100001100001000001001110000001000001100001100001011110″,

//”000010000110001010010010100010100010111111000010000010000010″,

//”111111100000100000100000111110000001000001000001100001011110″,

//”001110010000100000100000111110100001100001100001100001011110″,

//”111111000001000001000010000010000010000100000100000100000100″,

//”011110100001100001100001011110100001100001100001100001011110″,

//”011110100001100001100001011111000001000001000001000010011100″,

//”001100010010100001100001100001111111100001100001100001100001″,

//”111110100001100001100001111110100001100001100001100001111110″,

//”011110100001100000100000100000100000100000100000100001011110″,

//”111100100010100001100001100001100001100001100001100010111100″,

//”111111100000100000100000111110100000100000100000100000111111″,

//”111111100000100000100000111110100000100000100000100000100000″,

//”011110100001100000100000100000100111100001100001100011011101″,

//”100001100001100001100001111111100001100001100001100001100001″,

//”11111001000010000100001000010000100001000010011111″,

//”000111000010000010000010000010000010000010100010100010011100″,

//”100001100010100100101000110000110000101000100100100010100001″,

//”100000100000100000100000100000100000100000100000100000111111″,

//”1000001110001111000111010101101010110010011001001100000110000011000001″,

//”100001110001110001101001101001100101100101100011100011100001″,

//”011110100001100001100001100001100001100001100001100001011110″,

//”111110100001100001100001111110100000100000100000100000100000″,

//”01111001000010100001010000101000010100001010000101011010110011001111000000011″,

//”111110100001100001100001111110100100100010100010100001100001″,

//”011110100001100001100000011000000110000001100001100001011110″,

//”1111111000100000010000001000000100000010000001000000100000010000001000″,

//”100001100001100001100001100001100001100001100001100001011110″,

//”1000001100000110000010100010010001001000100010100001010000010000001000″,

//”1000001100000110000011001001100100110010011001001101010110101010100010″,

//”100001100001010010010010001100001100010010010010100001100001″,

//”1000001100000101000100100010001010000010000001000000100000010000001000″,

//”111111000001000001000010000100001000010000100000100000111111″,

//”011110100001000111011001100001100011011101″,

//”100000100000100000101110110001100001100001100001110001101110″,

//”011110100001100000100000100000100001011110″,

//”000001000001000001011101100011100001100001100001100011011101″,

//”011110100001100001111111100000100000011110″,

//”001110010001010000010000111110010000010000010000010000010000″,

//”000001011101100010100010100010011100010000011110100001100001011110″,

//”100000100000100000101110110001100001100001100001100001100001″,

//”00100001000000001100001000010000100001000010011111″,

//”00001000010000000011000010000100001000010000100001000011001001100″,

//”100000100000100000100010100100101000111000100100100010100001″,

//”01100001000010000100001000010000100001000010011111″,

//”1110110100100110010011001001100100110010011001001″,

//”101110110001100001100001100001100001100001″,

//”011110100001100001100001100001100001011110″,

//”101110110001100001100001100001110001101110100000100000100000″,

//”011101100011100001100001100001100011011101000001000001000001″,

//”101110110001100000100000100000100000100000″,

//”011110100001100000011110000001100001011110″,

//”001000001000111110001000001000001000001000001000001001000110″,

//”100001100001100001100001100001100011011101″,

//”100001100001100001010010010010001100001100″,

//”1000001100100110010011001001100100110101010100010″,

//”100001100001010010001100010010100001100001″,

//”100001100001100001100001100001010011001101000001000010011100″,

//”111111000010000100001000010000100000111111″

//        };

string[] CodeArray = new string[] {

“011110100001100011100101100101101001101001110001100001011110”,           //0…

“001111001001001001001001001001”,                     //1…

“011110100001100001000001000010000100001000010000100000111111”,           //2…

“011110100001100001000001001110000001000001100001100001011110”,           //3…

“000010000110001010001010010010100010111111000010000010000010”,           //4…

“111111100000100000111110100001000001000001100001100001011110”,           //5…

“011110100001100001100000101110110001100001100001100001011110”,           //6…

“111111000001000010000010000100000100000100001000001000010000”,           //7…

“011110100001100001100001011110100001100001100001100001011110”,           //8…

“011110100001100001100001100011011101000001100001100001011110”,//9……..

“001100010010100001100001100001111111100001100001100001100001”,//A

“111110100001100001100001111110100001100001100001100001111110”,//B

“011110100001100000100000100000100000100000100000100001011110”,//C

“111100100010100001100001100001100001100001100001100010111100”,//D

“111111100000100000100000111110100000100000100000100000111111”,//E

“111111100000100000100000111110100000100000100000100000100000”,//F

“011110100001100000100000100000100111100001100001100011011101”,//G

“100001100001100001100001111111100001100001100001100001100001”,//H

“11111001000010000100001000010000100001000010011111”,//I

“000111000010000010000010000010000010000010100010100010011100”,//J

“100001100010100100101000110000110000101000100100100010100001”,//K

“10000100001000010000100001000010000100001000011111”,//L……….

“1000001110001111000111010101101010110010011001001100000110000011000001”,//M

“100001110001110001101001101001100101100101100011100011100001”,//N

“011110100001100001100001100001100001100001100001100001011110”,//O

“111110100001100001100001111110100000100000100000100000100000”,//P

“01111001000010100001010000101000010100001010000101011010110011001111000000011”,//Q

“111110100001100001100001111110100100100010100010100001100001”,//R

“011110100001100001100000011000000110000001100001100001011110”,//S

“1111111000100000010000001000000100000010000001000000100000010000001000”,//T

“100001100001100001100001100001100001100001100001100001011110”,//U

“1000001100000110000010100010010001001000100010100001010000010000001000”,//V

“1000001100000110000011001001100100110010011001001101010110101010100010”,//W

“100001100001010010010010001100001100010010010010100001100001”,//X

“1000001100000101000100100010001010000010000001000000100000010000001000”,//Y

“111111000001000001000010000100001000010000100000100000111111”,//Z

“0111100100001001111101000010100001010000100111101”,//a……………..

“100000100000100000101110110001100001100001100001110001101110”,//b

“011110100001100000100000100000100001011110”,//c

“000001000001000001011101100011100001100001100001100011011101”,//d….

“011110100001100001111111100000100001011110”,//e………

“0011010001001110010001000100010001000100”,//f……….

“011101100011100001100001100001100011011101000001000001011110”,//g…….

“100000100000100000101110110001100001100001100001100001100001”,//h

“1001111111”,//i…………

“01000001010101010101010110”,//j……….

“100000100000100000100010100100101000111000100100100010100001”,//k…………

“01100001000010000100001000010000100001000010011111”,//l

“1010011110110110010011001001100100110010011001001”,//m……….

“101110110001100001100001100001100001100001”,//n

“011110100001100001100001100001100001011110”,//o…………

“101110110001100001100001100001110001101110100000100000100000”,//p…

“011101100011100001100001100001100011011101000001000001000001”,//q…

“1011110010001000100010001000”,//r…

“01110100011000001110000011000101110”,//s…

“010010111010010010010010001”,//t…

“100001100001100001100001100001100011011101”,//u…

“1000001100000101000100100010001010000101000001000”,//v…

“100010001100010001010101010010101010010101010001000100001000100”,//w…

“100001010010001100001100001100010010100001”,//x…

“1000001100000101000100100010001010000101000001000000100000100001100000”,//y…

“111111000010000100001000010000100000111111”//z

};

public unCodeAiYing(Bitmap pic)

: base(pic)

{

}

public string getPicnum()

{

GrayByPixels(); //灰度处理

//GetPicValidByValue(128, 6); //得到有效空间

Bitmap[] pics = GetSplitPics(6, 1);     //分割

if (pics.Length != 6)

{

return “NULL”; //分割错误

}

else  // 重新调整大小

{

pics[0] = GetPicValidByValue(pics[0], 128);

pics[1] = GetPicValidByValue(pics[1], 128);

pics[2] = GetPicValidByValue(pics[2], 128);

pics[3] = GetPicValidByValue(pics[3], 128);

pics[4] = GetPicValidByValue(pics[4], 128);

pics[5] = GetPicValidByValue(pics[5], 128);

}

OCRHelp.Binarizate(pics[0]);

OCRHelp.Binarizate(pics[1]);

OCRHelp.Binarizate(pics[2]);

OCRHelp.Binarizate(pics[3]);

OCRHelp.Binarizate(pics[4]);

OCRHelp.Binarizate(pics[5]);

//      if (!textBoxInput.Text.Equals(“”))

string result = “”;

char singleChar = ‘ ‘;

{

for (int i = 0; i < 6; i++)

{

string code = GetSingleBmpCode(pics[i], 128);   //得到代码串

for (int arrayIndex = 0; arrayIndex < CodeArray.Length; arrayIndex++)

{

if (CodeArray[arrayIndex].Equals(code))  //相等

{

if (arrayIndex < 10)   // 0..9

singleChar = (char)(48 + arrayIndex);

else if (arrayIndex < 36) //A..Z

singleChar = (char)(65 + arrayIndex – 10);

else

singleChar = (char)(97 + arrayIndex – 36);

result = result + singleChar;

}

}

}

}

return result;

}

}

}

UnCodeBase.cs代码

using System;

using System.Collections.Generic;

using System.Text;

using System.Collections;

using System.Drawing;

using System.Drawing.Imaging;

using System.Runtime.InteropServices;

namespace BallotAiying2

{

class UnCodebase

{

public Bitmap bmpobj;

public UnCodebase(Bitmap pic)

{

//       if (pic.PixelFormat == PixelFormat.Format8bppIndexed)

bmpobj = new Bitmap(pic);    //转换为Format32bppRgb

}

/// <summary>

/// 根据RGB,计算灰度值

/// </summary>

/// <param name=”posClr”>Color值</param>

/// <returns>灰度值,整型</returns>

private int GetGrayNumColor(System.Drawing.Color posClr)

{

return (posClr.R * 19595 + posClr.G * 38469 + posClr.B * 7472) >> 16;

}

/// <summary>

/// 灰度转换,逐点方式

/// </summary>

public void GrayByPixels()

{

for (int i = 0; i < bmpobj.Height; i++)

{

for (int j = 0; j < bmpobj.Width; j++)

{

int tmpValue = GetGrayNumColor(bmpobj.GetPixel(j, i));

bmpobj.SetPixel(j, i, Color.FromArgb(tmpValue, tmpValue, tmpValue));

}

}

}

/// <summary>

/// 去图形边框

/// </summary>

/// <param name=”borderWidth”></param>

public void ClearPicBorder(int borderWidth)

{

for (int i = 0; i < bmpobj.Height; i++)

{

for (int j = 0; j < bmpobj.Width; j++)

{

if (i < borderWidth || j < borderWidth || j > bmpobj.Width – 1 – borderWidth || i > bmpobj.Height – 1 – borderWidth)

bmpobj.SetPixel(j, i, Color.FromArgb(255, 255, 255));

}

}

}

/// <summary>

/// 灰度转换,逐行方式

/// </summary>

public void GrayByLine()

{

Rectangle rec = new Rectangle(0, 0, bmpobj.Width, bmpobj.Height);

BitmapData bmpData = bmpobj.LockBits(rec, ImageLockMode.ReadWrite, bmpobj.PixelFormat);// PixelFormat.Format32bppPArgb);

//    bmpData.PixelFormat = PixelFormat.Format24bppRgb;

IntPtr scan0 = bmpData.Scan0;

int len = bmpobj.Width * bmpobj.Height;

int[] pixels = new int[len];

Marshal.Copy(scan0, pixels, 0, len);

//对图片进行处理

int GrayValue = 0;

for (int i = 0; i < len; i++)

{

GrayValue = GetGrayNumColor(Color.FromArgb(pixels[i]));

pixels[i] = (byte)(Color.FromArgb(GrayValue, GrayValue, GrayValue)).ToArgb();      //Color转byte

}

bmpobj.UnlockBits(bmpData);

////输出

//GCHandle gch = GCHandle.Alloc(pixels, GCHandleType.Pinned);

//bmpOutput = new Bitmap(bmpobj.Width, bmpobj.Height, bmpData.Stride, bmpData.PixelFormat, gch.AddrOfPinnedObject());

//gch.Free();

}

/// <summary>

/// 得到有效图形并调整为可平均分割的大小

/// </summary>

/// <param name=”dgGrayValue”>灰度背景分界值</param>

/// <param name=”CharsCount”>有效字符数</param>

/// <returns></returns>

public void GetPicValidByValue(int dgGrayValue, int CharsCount)

{

int posx1 = bmpobj.Width; int posy1 = bmpobj.Height;

int posx2 = 0; int posy2 = 0;

for (int i = 0; i < bmpobj.Height; i++)      //找有效区

{

for (int j = 0; j < bmpobj.Width; j++)

{

int pixelValue = bmpobj.GetPixel(j, i).R;

if (pixelValue < dgGrayValue)     //根据灰度值

{

if (posx1 > j) posx1 = j;

if (posy1 > i) posy1 = i;

if (posx2 < j) posx2 = j;

if (posy2 < i) posy2 = i;

};

};

};

// 确保能整除

int Span = CharsCount – (posx2 – posx1 + 1) % CharsCount;   //可整除的差额数

if (Span < CharsCount)

{

int leftSpan = Span / 2;    //分配到左边的空列 ,如span为单数,则右边比左边大1

if (posx1 > leftSpan)

posx1 = posx1 – leftSpan;

if (posx2 + Span – leftSpan < bmpobj.Width)

posx2 = posx2 + Span – leftSpan;

}

//复制新图

Rectangle cloneRect = new Rectangle(posx1, posy1, posx2 – posx1 + 1, posy2 – posy1 + 1);

bmpobj = bmpobj.Clone(cloneRect, bmpobj.PixelFormat);

}

/// <summary>

/// 得到有效图形,图形为类变量

/// </summary>

/// <param name=”dgGrayValue”>灰度背景分界值</param>

/// <param name=”CharsCount”>有效字符数</param>

/// <returns></returns>

public void GetPicValidByValue(int dgGrayValue)

{

int posx1 = bmpobj.Width; int posy1 = bmpobj.Height;

int posx2 = 0; int posy2 = 0;

for (int i = 0; i < bmpobj.Height; i++)      //找有效区

{

for (int j = 0; j < bmpobj.Width; j++)

{

int pixelValue = bmpobj.GetPixel(j, i).R;

if (pixelValue < dgGrayValue)     //根据灰度值

{

if (posx1 > j) posx1 = j;

if (posy1 > i) posy1 = i;

if (posx2 < j) posx2 = j;

if (posy2 < i) posy2 = i;

};

};

};

//复制新图

Rectangle cloneRect = new Rectangle(posx1, posy1, posx2 – posx1 + 1, posy2 – posy1 + 1);

bmpobj = bmpobj.Clone(cloneRect, bmpobj.PixelFormat);

}

/// <summary>

/// 得到有效图形,图形由外面传入

/// </summary>

/// <param name=”dgGrayValue”>灰度背景分界值</param>

/// <param name=”CharsCount”>有效字符数</param>

/// <returns></returns>

public Bitmap GetPicValidByValue(Bitmap singlepic, int dgGrayValue)

{

int posx1 = singlepic.Width; int posy1 = singlepic.Height;

int posx2 = 0; int posy2 = 0;

for (int i = 0; i < singlepic.Height; i++)      //找有效区

{

for (int j = 0; j < singlepic.Width; j++)

{

int pixelValue = singlepic.GetPixel(j, i).R;

if (pixelValue < dgGrayValue)     //根据灰度值

{

if (posx1 > j) posx1 = j;

if (posy1 > i) posy1 = i;

if (posx2 < j) posx2 = j;

if (posy2 < i) posy2 = i;

};

};

};

//复制新图

Rectangle cloneRect = new Rectangle(posx1, posy1, posx2 – posx1 + 1, posy2 – posy1 + 1);

return singlepic.Clone(cloneRect, singlepic.PixelFormat);

}

/// <summary>

/// 平均分割图片

/// </summary>

/// <param name=”RowNum”>水平上分割数</param>

/// <param name=”ColNum”>垂直上分割数</param>

/// <returns>分割好的图片数组</returns>

public Bitmap [] GetSplitPics(int RowNum,int ColNum)

{

if (RowNum == 0 || ColNum == 0)

return null;

int singW = bmpobj.Width / RowNum;

int singH = bmpobj.Height / ColNum;

Bitmap [] PicArray=new Bitmap[RowNum*ColNum];

Rectangle cloneRect;

for (int i = 0; i < ColNum; i++)      //找有效区

{

for (int j = 0; j < RowNum; j++)

{

cloneRect = new Rectangle(j*singW, i*singH, singW , singH);

PicArray[i*RowNum+j]=bmpobj.Clone(cloneRect, bmpobj.PixelFormat);//复制小块图

}

}

return PicArray;

}

/// <summary>

/// 返回灰度图片的点阵描述字串,1表示灰点,0表示背景

/// </summary>

/// <param name=”singlepic”>灰度图</param>

/// <param name=”dgGrayValue”>背前景灰色界限</param>

/// <returns></returns>

public string GetSingleBmpCode(Bitmap singlepic, int dgGrayValue)

{

Color piexl;

string code = “”;

for (int posy = 0; posy < singlepic.Height; posy++)

for (int posx = 0; posx < singlepic.Width; posx++)

{

piexl = singlepic.GetPixel(posx, posy);

if (piexl.R < dgGrayValue)    // Color.Black )

code = code + “1”;

else

code = code + “0”;

}

return code;

}

}

}

OCRHelp.cs代码

using System;

using System.Collections.Generic;

using System.Text;

using System.Drawing;

namespace Ocr

{

class OCRHelp

{

public static void Binarizate(Bitmap map)

{

//int tv = ComputeThresholdValue(map);

int tv = 125;

int x = map.Width;

int y = map.Height;

for (int i = 0; i < x; i++)

{

for (int j = 0; j < y; j++)

{

if (map.GetPixel(i, j).G >= tv)

{

map.SetPixel(i, j, Color.FromArgb(0xff, 0xff, 0xff));

}

else

{

map.SetPixel(i, j, Color.FromArgb(0, 0, 0));

}

}

}

}

private static int ComputeThresholdValue(Bitmap img)

{

int i;

int k;

double csum;

int thresholdValue = 1;

int[] ihist = new int[0x100];

for (i = 0; i < 0x100; i++)

{

ihist[i] = 0;

}

int gmin = 0xff;

int gmax = 0;

for (i = 1; i < (img.Width – 1); i++)

{

for (int j = 1; j < (img.Height – 1); j++)

{

int cn = img.GetPixel(i, j).R;

ihist[cn]++;

if (cn > gmax)

{

gmax = cn;

}

if (cn < gmin)

{

gmin = cn;

}

}

}

double sum = csum = 0.0;

int n = 0;

for (k = 0; k <= 0xff; k++)

{

sum += k * ihist[k];

n += ihist[k];

}

if (n == 0)

{

return 60;

}

double fmax = -1.0;

int n1 = 0;

for (k = 0; k < 0xff; k++)

{

n1 += ihist[k];

if (n1 != 0)

{

int n2 = n – n1;

if (n2 == 0)

{

return thresholdValue;

}

csum += k * ihist[k];

double m1 = csum / ((double) n1);

double m2 = (sum – csum) / ((double) n2);

double sb = ((n1 * n2) * (m1 – m2)) * (m1 – m2);

if (sb > fmax)

{

fmax = sb;

thresholdValue = k;

}

}

}

return thresholdValue;

}

}

}

版权申明:本篇文章属于原创,转载请注明出自微信投票网。原文地址: https://www.aivote.com/12983.html