private void btnStatistic_Click(object sender, EventArgs e) { double dblProp = 0; List <double> dbllt = new List <double>(); List <CPoint> CResultPtLt = _DataRecords.ParameterResult.CResultPtLt; for (int i = 0; i <= 100; i++) { CPolyline cpl = CGeoFunc.GetTargetcpl(CResultPtLt, dblProp); dbllt.Add(cpl.pPolyline.Length); dblProp = dblProp + 0.01; } CHelpFuncExcel.ExportDataltToExcel(dbllt, "Length", _DataRecords.ParameterInitialize.strSavePath); //if (dblProp < 0 || dblProp > 1) //{ // MessageBox.Show("请输入正确参数!"); // return null; //} //List<CPoint> CResultPtLt = pDataRecords.ParameterResult.CResultPtLt; //CPolyline cpl = this.CGeoFunc.GetTargetcpl(CResultPtLt, dblProp); //// 清除绘画痕迹 //IMapControl4 m_mapControl = pDataRecords.ParameterInitialize.m_mapControl; //IGraphicsContainer pGra = m_mapControl.Map as IGraphicsContainer; //pGra.DeleteAllElements(); //m_mapControl.ActiveView.Refresh(); //this.ViewPolyline(m_mapControl, cpl); //显示生成的线段 //return cpl; }
private void btnExportToExcel_Click(object sender, EventArgs e) { for (int i = 0; i < _DataRecords.ParameterResultToExcelLt.Count; i++) { CHelpFuncExcel.ExportEvaluationToExcel(_DataRecords.ParameterResultToExcelLt[i], _DataRecords.ParameterInitialize, i.ToString()); } //CHelpFuncExcel.KillExcel(); }
private void btnReadData_Click(object sender, EventArgs e) { OpenFileDialog OFG = new OpenFileDialog(); OFG.Filter = "xlsx files (*.xlsx)|*.xlsx|All files (*.*)|*.*"; OFG.ShowDialog(); if (OFG.FileName == null || OFG.FileName == "") { return; } _DataRecords.ParameterResult = CHelpFuncExcel.InputDataResultPtLt(OFG.FileName); }
private void btnReadData_Click(object sender, EventArgs e) { OpenFileDialog OFG = new OpenFileDialog(); OFG.Filter = "xlsx files (*.xlsx)|*.xlsx|All files (*.*)|*.*"; OFG.ShowDialog(); if (OFG.FileName == null || OFG.FileName == "") { return; } _CPolylineLt = CHelpFuncExcel.InputDataLtXYZT(OFG.FileName); }
private SortedDictionary <int, object[]> GetDataSD(string strFileName) { var aObj = CHelpFuncExcel.ReadDataFromExcel(strFileName); var DataSD = new SortedDictionary <int, object[]>(); //the elements will be sorted according to ID for (int i = 1; i < aObj.GetUpperBound(0); i++) { DataSD.Add(Convert.ToInt32(aObj[i][0]), aObj[i]); } return(DataSD); }
private void btnstatisticEX_Click(object sender, EventArgs e) { double dblProp = -1; List <double> dbllt = new List <double>(); List <CPoint> CResultPtLt = _DataRecords.ParameterResult.CResultPtLt; for (int i = 0; i <= 300; i++) { CPolyline cpl = CGeoFunc.GetTargetcpl(CResultPtLt, dblProp); dbllt.Add(cpl.pPolyline.Length); dblProp = dblProp + 0.01; } CHelpFuncExcel.ExportDataltToExcel(dbllt, "Length", _DataRecords.ParameterInitialize.strSavePath); }
private void btnSaveLengthandAngles_Click(object sender, EventArgs e) { try { CParameterInitialize ParameterInitialize = _DataRecords.ParameterInitialize; List <CPolyline> cpllt = _DataRecords.ParameterResult.CResultPlLt; List <List <double> > dbllengthltlt = new List <List <double> >(); List <List <double> > dblangleltlt = new List <List <double> >(); for (int i = 0; i < cpllt.Count; i++) { dbllengthltlt.Add(CGeoFunc.RecordLengths(cpllt[i])); dblangleltlt.Add(CGeoFunc.RecordAngles(cpllt[i])); } CHelpFuncExcel.ExportDataltltToExcel(dbllengthltlt, "lengthltlt", ParameterInitialize.strSavePath); CHelpFuncExcel.ExportDataltltToExcel(dblangleltlt, "angleltlt", ParameterInitialize.strSavePath); } catch { MessageBox.Show("No data or other errors! (Have you already implemented timerAdd_Tick?)"); } }
private void btnRunMulti_Click(object sender, EventArgs e) { double dblThreshold = Convert.ToDouble(this.txtThreshold.Text); CParameterInitialize ParameterInitialize = _DataRecords.ParameterInitialize; //dialogue for saving SaveFileDialog SFD = new SaveFileDialog(); SFD.ShowDialog(); string strPath = SFD.FileName; ParameterInitialize.strSavePath = strPath; ParameterInitialize.pWorkspace = CHelpFunc.OpenWorkspace(strPath); int intLayerCount = ParameterInitialize.m_mapFeature.LayerCount; List <List <double> > OutPutLtLt = new List <List <double> >(intLayerCount); //some stupid codes :-) IFeatureLayer pFeatureLayerLast = (IFeatureLayer)ParameterInitialize.m_mapFeature.get_Layer(intLayerCount - 1); List <CPoint> CptLtLast = CHelpFunc.GetCPtLtFromPointFeatureLayer(pFeatureLayerLast); int intPtNumLast = CptLtLast.Count; long lngTime = 0; long lngStartMemory = 0; long lngMemory = 0; int intOutPut = 0; IFeatureLayer pFeatureLayer = null; for (int i = 0; i < intLayerCount; i++) { List <double> OutPutLt = new List <double>(18); lngStartMemory = GC.GetTotalMemory(true); pFeatureLayer = (IFeatureLayer)ParameterInitialize.m_mapFeature.get_Layer(i); List <CPoint> CptLt = CHelpFunc.GetCPtLtFromPointFeatureLayer(pFeatureLayer); //for (int j = 0; j < CptLt.Count; j++) //{ // CptLt[j].GID = j; // //CptLt[j].intTS = new TreeSet<int>(); //} //long lngMemory1 = GC.GetTotalMemory(true); double dblThreshold2 = dblThreshold * Math.Pow(Convert.ToDouble(intPtNumLast) / Convert.ToDouble(CptLt.Count), 0.5);//---------------dblThreshold------------------------------------------------// //------------------------------------------------Start------------------------------------------------// //long lngStartTime = System.Environment.TickCount; //record the start time //----------------------------------------SweepLineTwoCopiesTreeSet----------------------------------------// lngTime = 0; lngMemory = lngStartMemory; intOutPut = 0; SweepLineTwoCopiesTreeSet(ref CptLt, dblThreshold, ref lngTime, ref lngMemory, ref intOutPut); OutPutLt.Add(Convert.ToDouble(lngTime) / 1000); OutPutLt.Add(Convert.ToDouble(lngMemory) / 1048576); OutPutLt.Add(Convert.ToDouble(intOutPut) / 1000); lngTime = 0; lngMemory = lngStartMemory; intOutPut = 0; SweepLineTwoCopiesTreeSet(ref CptLt, dblThreshold2, ref lngTime, ref lngMemory, ref intOutPut); OutPutLt.Add(Convert.ToDouble(lngTime) / 1000); OutPutLt.Add(Convert.ToDouble(lngMemory) / 1048576); OutPutLt.Add(Convert.ToDouble(intOutPut) / 1000); //----------------------------------------SortedSet----------------------------------------// lngTime = 0; lngMemory = lngStartMemory; intOutPut = 0; SweepLineTwoCopiesSortedSet(ref CptLt, dblThreshold, ref lngTime, ref lngMemory, ref intOutPut); OutPutLt.Add(Convert.ToDouble(lngTime) / 1000); OutPutLt.Add(Convert.ToDouble(lngMemory) / 1048576); OutPutLt.Add(Convert.ToDouble(intOutPut) / 1000); lngTime = 0; lngMemory = lngStartMemory; intOutPut = 0; SweepLineTwoCopiesSortedSet(ref CptLt, dblThreshold2, ref lngTime, ref lngMemory, ref intOutPut); OutPutLt.Add(Convert.ToDouble(lngTime) / 1000); OutPutLt.Add(Convert.ToDouble(lngMemory) / 1048576); OutPutLt.Add(Convert.ToDouble(intOutPut) / 1000); //----------------------------------------TwoCopiesSortedDictionary----------------------------------------// lngTime = 0; lngMemory = lngStartMemory; intOutPut = 0; SweepLineTwoCopiesWithoutC5(ref CptLt, dblThreshold, ref lngTime, ref lngMemory, ref intOutPut); OutPutLt.Add(Convert.ToDouble(lngTime) / 1000); OutPutLt.Add(Convert.ToDouble(lngMemory) / 1048576); OutPutLt.Add(Convert.ToDouble(intOutPut) / 1000); lngTime = 0; lngMemory = lngStartMemory; intOutPut = 0; SweepLineTwoCopiesWithoutC5(ref CptLt, dblThreshold2, ref lngTime, ref lngMemory, ref intOutPut); OutPutLt.Add(Convert.ToDouble(lngTime) / 1000); OutPutLt.Add(Convert.ToDouble(lngMemory) / 1048576); OutPutLt.Add(Convert.ToDouble(intOutPut) / 1000); OutPutLtLt.Add(OutPutLt); ParameterInitialize.tspbMain.Value = (i + 1) * 100 / intLayerCount; pFeatureLayer = null; CptLt = null; OutPutLt = null; } CHelpFuncExcel.ExportDataltltToExcel(OutPutLtLt, "Time&Output", ParameterInitialize.strSavePath); //dblTimeLt = new List<double>(intLayerCount); //dblOutPutLt = new List<double>(intLayerCount); //lngMemoryLt = new List<double>(intLayerCount); //OutPutLtLt = new List<List<double>>(3); ////for (int i = 0; i < intLayerCount; i++) //for (int i = 0; i < intLayerCount; i++) //{ // long lngMemory = GC.GetTotalMemory(true); // pFeatureLayer = (IFeatureLayer)ParameterInitialize.m_mapFeature.get_Layer(intLayerCount - 1 - i); // List<CPoint> CptLt = CHelpFunc.GetCPtLtByFeatureLayer(pFeatureLayer); // for (int j = 0; j < CptLt.Count; j++) // { // CptLt[j].GID = j; // //CptLt[j].intTS = new TreeSet<int>(); // } // //long lngMemory1 = GC.GetTotalMemory(true); // dblThreshold = Math.Pow(1.8 / Convert.ToDouble(CptLt.Count), 0.5);//---------------dblThreshold------------------------------------------------// // //------------------------------------------------Start------------------------------------------------// // int intOutPut = 0; // long lngStartTime = System.Environment.TickCount; //record the start time // if (cboFunction.Text == "Two Copies") // { // SweepLineTwoCopiesTreeSet(ref CptLt, dblThreshold, ref lngMemory, ref intOutPut); // } // else if (cboFunction.Text == "Two Copies Without C5") // { // SweepLineTwoCopiesWithoutC5(ref CptLt, dblThreshold, ref lngMemory, ref intOutPut); // } // else if (cboFunction.Text == "Two Sweep Lines") // { // SweepLineTwoSweepLines(ref CptLt, dblThreshold); // } // dblTimeLt.Add(System.Environment.TickCount - lngStartTime); // lngMemoryLt.Add(Convert.ToDouble(lngMemory) / 1048576); // dblOutPutLt.Add(intOutPut); // //int intOutPut = 0; // //for (int j = 0; j < CptLt.Count; j++) // //{ // // intOutPut += CptLt[j].intTS.Count; // //} // //dblOutPutLt.Add(intOutPut / 2); // //for (int j = 0; j < CptLt.Count; j++) // //{ // // CptLt[j].intTS.Dispose(); // // CptLt[j].SetEmpty2(); // //} // ParameterInitialize.tspbMain.Value = (i + 1) * 100 / intLayerCount; // pFeatureLayer = null; // CptLt = null; //} //OutPutLtLt.Add(dblTimeLt); //OutPutLtLt.Add(lngMemoryLt); //OutPutLtLt.Add(dblOutPutLt); //CHelpFuncExcel.ExportColDataltltToExcel(OutPutLtLt, "Time&Output_ChangeThreshold", ParameterInitialize.strSavePath); MessageBox.Show("Done!"); }
/// <summary>多个结果的Morphing方法</summary> /// <remarks>对于指定的回溯参数K,不断计算增大的结果,直到Translation值稳定</remarks> public CParameterResult OptCorMorphing() { var pParameterInitialize = _ParameterInitialize; var pFrCptLtLt = this.FrCptLtLt; var pToCptLtLt = this.ToCptLtLt; var pObjValueLtLtLt = this.ObjValueLtLtLt; //var intFieldIndex = pParameterInitialize.pFLayerLt[0].FeatureClass.FindField(pParameterInitialize.txtAttributeOfKnown.Text); //try to add an attribute, if this attribute is already existed, then do nothing, otherwise, add this attribute and set value to -1 //if (intFieldIndex == -1) //{ // intFieldIndex = CSaveFeature.AddField(pParameterInitialize.pFLayerLt[0].FeatureClass, // esriFieldType.esriFieldTypeDouble, pParameterInitialize.txtAttributeOfKnown.Text); // //CSaveFeature.SetFieldValue(pParameterInitialize.pFLayerLt[0].FeatureClass, intFieldIndex, -1); // this.strFieldNameLtLt[0].Add(pParameterInitialize.txtAttributeOfKnown.Text); // this.esriFieldTypeLtLt[0].Add(esriFieldType.esriFieldTypeDouble); // for (int i = 0; i < pFrCptLtLt.Count; i++) // { // pObjValueLtLtLt[0][i].Add(0); // } //} int intMaxBackKforI = Convert.ToInt32(pParameterInitialize.txtMaxBackK.Text); int intMaxBackKforJ = SetintMaxBackKforJ(pParameterInitialize.cboIntMaxBackKforJ.SelectedIndex, intMaxBackKforI); int intMulti = Convert.ToInt32(pParameterInitialize.txtMulti.Text); int intIncrease = Convert.ToInt32(pParameterInitialize.txtIncrease.Text); CConstants.strMethod = pParameterInitialize.cboMorphingMethod.Text; //delegation of morphing method DlgCreateTable dlgCreateTable = SetDlgCreateTable(pParameterInitialize.cboMorphingMethod.Text); _pEvaluation = new CEvaluation(pParameterInitialize.cboEvaluationMethod.SelectedIndex); var StandardVectorCpt = SetStandardVectorCpt(pParameterInitialize.cboStandardVector.SelectedIndex, pFrCptLtLt[0].First(), pToCptLtLt[0].First()); long lngStartTime1 = System.Environment.TickCount; //lngTime1 Stopwatch pStopwatch1 = Stopwatch.StartNew(); foreach (var cptlt in pFrCptLtLt) { CGeoFunc.SetEdgeLengthOnToCpt(cptlt); } foreach (var cptlt in pToCptLtLt) { CGeoFunc.SetEdgeLengthOnToCpt(cptlt); } CGeoFunc.IntegrateStandardVectorCpt(pFrCptLtLt, StandardVectorCpt); //generate cptltltlt var frcptltltlt = new List <List <List <CPoint> > >(pFrCptLtLt.Count); var tocptltltlt = new List <List <List <CPoint> > >(pToCptLtLt.Count); SetCptLtLtLt(pParameterInitialize.chkCoincidentPoints.Checked, pFrCptLtLt, pToCptLtLt, ref frcptltltlt, ref tocptltltlt); pStopwatch1.Stop(); long lngTimeSetLength = System.Environment.TickCount - lngStartTime1; //lngTime1 var dblDistanceLt = new List <double>(intMulti); var dblTimeLt = new List <double>(intMulti); var pCorrCptsLtLt = new List <List <CCorrCpts> >(pFrCptLtLt.Count); //we only record the last one, when i = intMulti -1 var pCtrlCptsLtLt = new List <List <CCorrCpts> >(pToCptLtLt.Count); //we only record the last one, when i = intMulti -1 for (int i = 0; i < intMulti; i++) { //Stopwatch pStopwatch2 = Stopwatch.StartNew(); double dblTotalDistance = 0; long lngTotalOptCorTime = 0; IFeatureCursor pFeatureCursor = pParameterInitialize.pFLayerLt[0].FeatureClass.Search(null, false); for (int j = 0; j < pFrCptLtLt.Count; j++) //for every polyline //for (int j = 0; j < 100; j++) { Stopwatch pStopwatch2 = Stopwatch.StartNew(); double dblDistance = 0; //double dblComputedDis = Convert.ToDouble(pObjValueLtLtLt[0][j][intFieldIndex]); double dblComputedDis = 0; if (dblComputedDis > 0 && intMaxBackKforI >= (pFrCptLtLt[j].Count - 1) && intMaxBackKforJ >= (pToCptLtLt[j].Count - 1)) { dblDistance = dblComputedDis; } else { var frcptltlt = frcptltltlt[j]; //cptltlt are all the points of a polyline var tocptltlt = tocptltltlt[j]; var TableLt = new List <CTable>(frcptltlt.Count); Console.WriteLine("intMulti= " + i + ", Line ID:" + j); for (int k = 0; k < frcptltlt.Count; k++) { //Console.WriteLine("intMulti= " + i + ", Line ID:" + j + ", Segment ID:" + k); var Table = dlgCreateTable(frcptltlt[k], tocptltlt[k], intMaxBackKforI, intMaxBackKforJ); dblDistance += Table.dblCost; //Console.WriteLine("cost: " + dblDistance); TableLt.Add(Table); } dblDistance /= _pEvaluation.dblCorrection; pStopwatch2.Stop(); lngTotalOptCorTime += pStopwatch2.ElapsedMilliseconds; CGeoFunc.RemoveStandardVectorCpt(pFrCptLtLt [j], StandardVectorCpt); List <CCorrCpts> CtrlCptsLt; var pCorrCptsLt = GetCorrespondences(TableLt, frcptltlt, tocptltlt, pFrCptLtLt[j].Count, pToCptLtLt[j].Count, out CtrlCptsLt); pCorrCptsLtLt.Add(pCorrCptsLt); pCtrlCptsLtLt.Add(CtrlCptsLt); //this will also set MoveVector for CtrlCptsLt //CsfInter0.SaveIGeoEbToLayer(CHelpFunc.MakeEb(1, GenerateInterpolatedIPl(pCorrCptsLt, 0))); //CsfInter1.SaveIGeoEbToLayer(CHelpFunc.MakeEb(1, GenerateInterpolatedIPl(pCorrCptsLt, 1))); //CsfCtrlpl.SaveIGeoEbToLayer(GenerateCorrIPlEb(CtrlCptsLt)); //CsfCorrpl.SaveIGeoEbToLayer(GenerateCorrIPlEb(pCorrCptsLt)); CHelpFunc.SetMoveVectorForCorrCptsLt(pCorrCptsLt); //if the look-back parameter is larger than the points number of a pair of polylines, //than we don't need to try a larger look-back parameter //Therefore, we record the distance for the two polylines //if (intMaxBackKforI >= (pFrCptLtLt[j].Count - 1) && intMaxBackKforJ >= (pToCptLtLt[j].Count - 1)) //{ // pObjValueLtLtLt[0][j][intFieldIndex] = dblDistance; // for (int l = intFeatureNum; l < pFrCptLtLt.Count; l++) //find the feature and record it // { // IFeature pFeature = pFeatureCursor.NextFeature(); // if (j == l) // { // pFeature.set_Value(intFieldIndex, dblDistance); // pFeature.Store(); // intFeatureNum = j + 1; //we record the index, so that next time we can start from this index // break; // } // } //} //pExcelSaver.WriteLine(CHelpFunc.MakeEb<object>(5, j, //pLSCPlLt[j].CptLt.Count, pSSCPlLt[j].CptLt.Count, dblDistance, pStopwatch2.ElapsedMilliseconds)); } dblTotalDistance += dblDistance; } dblTimeLt.Add(pStopwatch1.ElapsedMilliseconds + lngTotalOptCorTime); dblDistanceLt.Add(dblTotalDistance); //pExcelSaver.Close (); //CHelpFuncExcel.ExportDataltltToExcel(tablevalueltlt, intMaxBackKforI + "Tableltlt0", pParameterInitialize.strSavePath); //保存对应线 CHelpFuncExcel.ExportDataltToExcel(dblTimeLt, intMaxBackKforI + "Timelt0", pParameterInitialize.strSavePath); CHelpFuncExcel.ExportDataltToExcel(dblDistanceLt, intMaxBackKforI + "Distancelt0", pParameterInitialize.strSavePath); CHelpFunc.Displaytspb(i + 1, intMulti); pParameterInitialize.txtEvaluation.Text = dblDistanceLt.Last().ToString(); pParameterInitialize.tsslTime.Text = "Running Time: " + dblTimeLt.Last().ToString(); intMaxBackKforI = intMaxBackKforI + intIncrease; _CorrCptsLtLt = pCorrCptsLtLt; } double dblStandardLength = CGeoFunc.CalDis(0, 0, StandardVectorCpt.X, StandardVectorCpt.Y); intMaxBackKforI--; CHelpFunc.SaveCtrlLine(pCtrlCptsLtLt, intMaxBackKforI + "_" + CConstants.strMethod + "CtrlLine", dblStandardLength, pParameterInitialize.pWorkspace, pParameterInitialize.m_mapControl); CHelpFunc.SaveCorrLine(pCorrCptsLtLt, intMaxBackKforI + "_" + CConstants.strMethod + "CorrLine", pParameterInitialize.pWorkspace, pParameterInitialize.m_mapControl); CHelpFunc.SetMoveVectorForCorrCptsLtLt(_CorrCptsLtLt); //the results will be recorded in _ParameterResult CParameterResult ParameterResult = new CParameterResult(); ParameterResult.pMorphingBaseCpl = this as CMorphingBaseCpl; ParameterResult.pMorphingBase = this as CMorphingBase; _ParameterResult = ParameterResult; return(ParameterResult); }
private void btnRunMulti_Click(object sender, EventArgs e) { double dblThreshold = Convert.ToDouble(this.txtThreshold.Text); IFeatureLayer pFeatureLayer = null; CParameterInitialize ParameterInitialize = _DataRecords.ParameterInitialize; //dialogue for saving SaveFileDialog SFD = new SaveFileDialog(); SFD.ShowDialog(); string strPath = SFD.FileName; ParameterInitialize.strSavePath = strPath; ParameterInitialize.pWorkspace = CHelpFunc.OpenWorkspace(strPath); string strTINPath = strPath + "\\TIN"; string strTINPath2 = strPath + "\\TIN2"; System.IO.Directory.CreateDirectory(strTINPath); System.IO.Directory.CreateDirectory(strTINPath2); int intLayerCount = ParameterInitialize.m_mapFeature.LayerCount; List <List <double> > OutPutLtLt = new List <List <double> >(intLayerCount); //some stupid codes :-) IFeatureLayer pFeatureLayerLast = (IFeatureLayer)ParameterInitialize.m_mapFeature.get_Layer(intLayerCount - 1); List <CPoint> CptLtLast = CHelpFunc.GetCPtLtFromPointFeatureLayer(pFeatureLayerLast); int intPtNumLast = CptLtLast.Count; long lngMemory = 0; long lngMemoryDT = 0; long lngMemoryDTProcess = 0; int intOutPut = 0; long lngTimeForSearching = 0; long lngTimeForDT = 0; List <CPoint> CptLt = new List <CPoint>(); OutPutLtLt = new List <List <double> >(6); for (int i = 0; i < intLayerCount; i++) //for (int i = 0; i < 2; i++) { List <double> OutPutLt = new List <double>(8); //double ss = intPtNumLast / Convert.ToDouble(159); //double kk = Math.Pow(intPtNumLast / Convert.ToDouble(CptLt.Count), 0.5); //double dblThreshold2 = dblThreshold * Math.Pow(intPtNumLast / Convert.ToDouble(CptLt.Count), 0.5); //---------------dblThreshold------------------------------------------------// pFeatureLayer = (IFeatureLayer)ParameterInitialize.m_mapFeature.get_Layer(i); //long lngMemory2 = GC.GetTotalMemory(true); lngMemoryDT = 0; lngMemoryDTProcess = 0; intOutPut = 0; lngTimeForSearching = 0; lngTimeForDT = 0; //------------------------------------Action------------------------------------// CptLt = LookingForNeighboursDT(pFeatureLayer, dblThreshold, -1, ref lngTimeForSearching, ref lngTimeForDT, ref lngMemory, ref lngMemoryDT, ref lngMemoryDTProcess, ref intOutPut, strTINPath); //long lngMemory3 = GC.GetTotalMemory(true); OutPutLt.Add(Convert.ToDouble(lngTimeForSearching + lngTimeForDT) / 1000); OutPutLt.Add(Convert.ToDouble(lngTimeForDT) / 1000); OutPutLt.Add(Convert.ToDouble(lngMemory) / 1048576); OutPutLt.Add(Convert.ToDouble(lngMemoryDT) / 1048576); OutPutLt.Add(Convert.ToDouble(lngMemoryDTProcess) / 1048576); //int intOutPut = 0; //for (int j = 0; j < CptLt.Count; j++) //{ // intOutPut += CptLt[j].intTS.Count; //} OutPutLt.Add(Convert.ToDouble(intOutPut) / 2 / 1000); //long lngMemory2 = GC.GetTotalMemory(true); lngMemoryDT = 0; lngMemoryDTProcess = 0; intOutPut = 0; lngTimeForSearching = 0; lngTimeForDT = 0; CptLt = LookingForNeighboursDT(pFeatureLayer, dblThreshold, intPtNumLast, ref lngTimeForSearching, ref lngTimeForDT, ref lngMemory, ref lngMemoryDT, ref lngMemoryDTProcess, ref intOutPut, strTINPath2); //*******************Action*******************// //long lngMemory3 = GC.GetTotalMemory(true); OutPutLt.Add(Convert.ToDouble(lngTimeForSearching) / 1000); OutPutLt.Add(Convert.ToDouble(lngTimeForDT) / 1000); OutPutLt.Add(Convert.ToDouble(lngMemory) / 1048576); OutPutLt.Add(Convert.ToDouble(lngMemoryDT) / 1048576); OutPutLt.Add(Convert.ToDouble(lngMemoryDTProcess) / 1048576); //int intOutPut = 0; //for (int j = 0; j < CptLt.Count; j++) //{ // intOutPut += CptLt[j].intTS.Count; //} OutPutLt.Add(Convert.ToDouble(intOutPut) / 2 / 1000); OutPutLtLt.Add(OutPutLt); CHelpFunc.Displaytspb(i + 1, intLayerCount); pFeatureLayer = null; CptLt = null; OutPutLt = null; } CHelpFuncExcel.ExportDataltltToExcel(OutPutLtLt, "Time&Output_ChangeThreshold", ParameterInitialize.strSavePath); MessageBox.Show("Done!"); }
/// <summary> /// output the information that we want /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnRun2_Click(object sender, EventArgs e) { var aObj_Out_kars = CHelpFuncExcel.ReadDataFromExcel (@"C:\Study\MyWork\CodesChecking\fsvw_common_KARS_DM_Out\kars2"); var aObj_Met_pos = CHelpFuncExcel.ReadDataFromExcel (@"C:\Study\MyWork\CodesChecking\fsvw_common_KARS_DM_Out\methods_position"); //char[] charSeparators = new char[] { ' ', ';' }; //var result = str.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries); //var strPos_fileSD = new SortedDictionary<string, string>(); var CheckRangeSS = new SortedSet <CCheckRange>(); for (int i = 1; i < aObj_Met_pos.GetLength(0); i++) { int j = 1; while (j < aObj_Met_pos[i].GetLength(0) && aObj_Met_pos[i][j].ToString() != "" && aObj_Met_pos[i][j].ToString() != null) { CCheckRange pchkrng = new CCheckRange(aObj_Met_pos[i][j++].ToString(), Convert.ToInt32(aObj_Met_pos[i][j++]), Convert.ToInt32(aObj_Met_pos[i][j++]), aObj_Met_pos[i][0].ToString()); CheckRangeSS.Add(pchkrng); } } //var astrRemainLt = new List<object[]>(); var astrPasteLt = new List <object[]>(); //from 'possible_files', we know that whether a function is at top-level var aObj_Pos_fil = CHelpFuncExcel.ReadDataFromExcel (@"C:\Study\MyWork\CodesChecking\fsvw_common_KARS_DM_Out\possible_files"); var strMethodFilesSD = new SortedDictionary <string, object[]>(); for (int i = 1; i < aObj_Pos_fil.GetLength(0); i++) { strMethodFilesSD.Add(aObj_Pos_fil[i][0].ToString(), aObj_Pos_fil[i]); } for (int i = 1; i < aObj_Out_kars.GetLength(0); i++) { CCheckRange pchkrng = new CCheckRange(aObj_Out_kars[i][0].ToString(), Convert.ToInt32(aObj_Out_kars[i][1]), Convert.ToInt32(aObj_Out_kars[i][1])); CCheckRange pchkrngstart = new CCheckRange(aObj_Out_kars[i][0].ToString(), 0, 0); var predecessor = CheckRangeSS.GetViewBetween(pchkrngstart, pchkrng).Max; if (predecessor != null && predecessor.intEndline >= pchkrng.intEndline) { //astrRemainLt.Add(aObj_Out_kars[i]); var aPaste = new object[] { predecessor.strFileName, predecessor.strMethod, "", //Mangled Name "", //Line, actual pchkrng.intStartline, GetColumn(@"C:\Study\MyWork\CodesChecking\fsvw_common_KARS_DM_Eclipse\fsvw_common_KARS_DM\" + predecessor.strFileName, pchkrng.intStartline), "", //Stmt-No IsCalled(strMethodFilesSD, predecessor.strMethod), aObj_Out_kars[i][2], aObj_Out_kars[i][3], aObj_Out_kars[i][4] }; astrPasteLt.Add(aPaste); } } //CHelpFuncExcel.ExportToExcel(astrRemainLt, // CHelpFunc.GetTimeStamp() + "_out_kars_Extracted_" + astrRemainLt.Count, // @"C:\Study\MyWork\CodesChecking\fsvw_common_KARS_DM_Out"); CHelpFuncExcel.ExportToExcel(astrPasteLt, "out_kars_ExtractedProcessed_" + astrPasteLt.Count, @"C:\Study\MyWork\CodesChecking\fsvw_common_KARS_DM_Out"); }
private void btnExportToExcel_Click(object sender, EventArgs e) { CHelpFuncExcel.ExportEvaluationToExcelCorr(_DataRecords.ParameterResult, _DataRecords.ParameterInitialize.strSavePath); }
/// <summary> /// for the methods that we want to check, we find their positions /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void btnRun_Click(object sender, EventArgs e) { var aObj_CheckingMethods = CHelpFuncExcel.ReadDataFromExcel (@"C:\Study\MyWork\CodesChecking\fsvw_common_KARS_DM_Out\checkingmethods"); List <List <object> > resultobjltlt = new List <List <object> >(aObj_CheckingMethods.GetLength(0)); int intMaxOccurency = 0; for (int i = 0; i < aObj_CheckingMethods.GetLength(0); i++) //for (int i = 0; i < 1; i++) { var strMethod = aObj_CheckingMethods[i][0].ToString(); string[] filenames = Directory.GetFiles(@"C:\Study\MyWork\CodesChecking\fsvw_common_KARS_DM_Eclipse\fsvw_common_KARS_DM", "*.*", SearchOption.TopDirectoryOnly); List <object> resultobjlt = new List <object> { strMethod }; int intOccurency = 0; foreach (var filename in filenames) { System.IO.StreamReader file = new System.IO.StreamReader(filename); string strline = ""; int intlinecounter = 1; while ((strline = file.ReadLine()) != null) { //strline. //if (intlinecounter==60) //{ // int ss = 5; //} if (strline.Contains(strMethod + "(") && !strline.Contains("<td>" + strMethod)) //if strMethod is used as a method, we try to find the end of this using { int intStartline = intlinecounter; while (strline != null) { if (strline.Contains(";")) { break; } if (strline.Contains("{") && strline[0] == '{') { break; } strline = file.ReadLine(); intlinecounter++; } if (strline.Contains(";") && !(strline.Contains("{") && strline[0] == '{')) { //the strMethod is called here, we don't care } else if (!strline.Contains(";") && (strline.Contains("{") && strline[0] == '{')) { resultobjlt.Add(System.IO.Path.GetFileName(filename)); resultobjlt.Add(intStartline); while (!(strline.Contains("}") && strline[0] == '}')) { strline = file.ReadLine(); intlinecounter++; } resultobjlt.Add(intlinecounter); intOccurency++; } else { MessageBox.Show("impossible case!"); } } intlinecounter++; } file.Close(); } resultobjltlt.Add(resultobjlt); intMaxOccurency = Math.Max(intMaxOccurency, intOccurency); } var strHeadLt = new List <string>(1 + intMaxOccurency * 3); strHeadLt.Add("Methods"); for (int i = 0; i < intMaxOccurency; i++) { strHeadLt.Add("File"); strHeadLt.Add("Start"); strHeadLt.Add("End"); } CHelpFuncExcel.ExportToExcel(resultobjltlt, "methods_position", @"C:\Study\MyWork\CodesChecking\fsvw_common_KARS_DM_Out", strHeadLt); MessageBox.Show("done!"); }
private void btnRun3_Click(object sender, EventArgs e) { string strFileNameCheckingMethods = @"C:\Study\MyWork\CodesChecking\fsvw_common_KARS_DM_Out\checkingmethods"; var aObj_CheckingMethods = CHelpFuncExcel.ReadDataFromExcel(strFileNameCheckingMethods); List <List <object> > resultobjltlt = new List <List <object> >(aObj_CheckingMethods.GetLength(0)); int intMaxOccurency = 0; for (int i = 0; i < aObj_CheckingMethods.GetLength(0); i++) //for (int i = 0; i < 1; i++) { var strMethod = aObj_CheckingMethods[i][0].ToString(); string[] filenames = Directory.GetFiles(@"C:\Study\MyWork\CodesChecking\fsvw_common_KARS_DM_Eclipse\fsvw_common_KARS_DM", "*.*", SearchOption.TopDirectoryOnly); List <object> resultobjlt = new List <object> { strMethod }; int intOccurency = 0; foreach (var filename in filenames) { System.IO.StreamReader file = new System.IO.StreamReader(filename); string strline = ""; int intlinecounter = 1; while ((strline = file.ReadLine()) != null) { if (strline.Contains(strMethod)) { resultobjlt.Add(System.IO.Path.GetFileName(filename)); if (strline.Contains(strMethod + "(")) //if strMethod is used as a method, we try to find the end of this using { resultobjlt.Add(intlinecounter); while (strline != null && !strline.Contains(";")) { strline = file.ReadLine(); intlinecounter++; } resultobjlt.Add(intlinecounter); } else //a special announce case { resultobjlt.Add(intlinecounter - 1); resultobjlt.Add(intlinecounter + 2); } intOccurency++; } intlinecounter++; } file.Close(); } resultobjltlt.Add(resultobjlt); intMaxOccurency = Math.Max(intMaxOccurency, intOccurency); } var strHeadLt = new List <string>(1 + intMaxOccurency * 3); strHeadLt.Add("Methods"); for (int i = 0; i < intMaxOccurency; i++) { strHeadLt.Add("File"); strHeadLt.Add("Start"); strHeadLt.Add("End"); } CHelpFuncExcel.ExportToExcel(resultobjltlt, "methods_position", @"C:\Study\MyWork\CodesChecking\fsvw_common_KARS_DM_Out", strHeadLt); MessageBox.Show("done!"); }
private void btnExportToExcel_Click(object sender, EventArgs e) { CHelpFuncExcel.ExportEvaluationToExcel(_DataRecords.ParameterResultToExcel, _DataRecords.ParameterInitialize, "0"); //CHelpFuncExcel.KillExcel(); }
private void btnRunMulti_Click(object sender, EventArgs e) { double dblThreshold = Convert.ToDouble(this.txtThreshold.Text); double dblGridSize = Convert.ToDouble(this.txtGridSize.Text); IFeatureLayer pFeatureLayer = null; CParameterInitialize ParameterInitialize = _DataRecords.ParameterInitialize; //dialogue for saving SaveFileDialog SFD = new SaveFileDialog(); SFD.ShowDialog(); string strPath = SFD.FileName; ParameterInitialize.strSavePath = strPath; ParameterInitialize.pWorkspace = CHelpFunc.OpenWorkspace(strPath); int intLayerCount = ParameterInitialize.m_mapFeature.LayerCount; List <List <double> > OutPutLtLt = new List <List <double> >(intLayerCount); //some stupid codes :-) IFeatureLayer pFeatureLayerLast = (IFeatureLayer)ParameterInitialize.m_mapFeature.get_Layer(intLayerCount - 1); List <CPoint> CptLtLast = CHelpFunc.GetCPtLtFromPointFeatureLayer(pFeatureLayerLast); int intPtNumLast = CptLtLast.Count; long lngTime = 0; long lngStartMemory = 0; long lngMemory = 0; int intOutPut = 0; for (int i = 9; i < intLayerCount; i++) { List <double> OutPutLt = new List <double>(6); lngStartMemory = GC.GetTotalMemory(true); //long lngMemory1 = GC.GetTotalMemory(true); pFeatureLayer = (IFeatureLayer)ParameterInitialize.m_mapFeature.get_Layer(i); List <CPoint> CptLt = CHelpFunc.GetCPtLtFromPointFeatureLayer(pFeatureLayer); //GC.GetTotalMemory(true); //long lngMemory2 = GC.GetTotalMemory(true); //for (int j = 0; j < CptLt.Count; j++) //{ // CptLt[j].GID = j; // //CptLt[j].intTS = new TreeSet<int>(); //} //long lngMemory3 = GC.GetTotalMemory(true); //dblThreshold = Math.Pow(1.8 / Convert.ToDouble(CptLt.Count), 0.5);//---------------dblThreshold------------------------------------------------// //222222222222222222 lngTime = 0; lngMemory = lngStartMemory; intOutPut = 0; double dblThreshold2 = dblThreshold; double dblGridSize2 = dblGridSize * Math.Pow(Convert.ToDouble(intPtNumLast) / Convert.ToDouble(CptLt.Count), 0.5); Grids(ref CptLt, dblThreshold2, dblGridSize2, ref lngTime, ref lngMemory, ref intOutPut); OutPutLt.Add(Convert.ToDouble(lngTime) / 1000); OutPutLt.Add(Convert.ToDouble(lngMemory) / 1048576); OutPutLt.Add(Convert.ToDouble(intOutPut) / 1000); //3333333333333333 lngTime = 0; lngMemory = lngStartMemory; intOutPut = 0; double dblThreshold3 = dblThreshold * Math.Pow(Convert.ToDouble(intPtNumLast) / Convert.ToDouble(CptLt.Count), 0.5); double dblGridSize3 = dblGridSize * Math.Pow(Convert.ToDouble(intPtNumLast) / Convert.ToDouble(CptLt.Count), 0.5); Grids(ref CptLt, dblThreshold3, dblGridSize3, ref lngTime, ref lngMemory, ref intOutPut); OutPutLt.Add(Convert.ToDouble(lngTime) / 1000); OutPutLt.Add(Convert.ToDouble(lngMemory) / 1048576); OutPutLt.Add(Convert.ToDouble(intOutPut) / 1000); //dblTimeLt.Add(lngTime); //lngMemoryLt.Add(Convert.ToDouble(lngMemory) / 1048576); ////lngStartMemoryLt.Add(lngStartMemory); ////int intOutPut = 0; ////for (int j = 0; j < CptLt.Count; j++) ////{ //// intOutPut += CptLt[j].intTS.Count; ////} //dblOutPutLt.Add(intOutPut); OutPutLtLt.Add(OutPutLt); ParameterInitialize.tspbMain.Value = (i + 1) * 100 / intLayerCount; pFeatureLayer = null; CptLt = null; OutPutLt = null; } CHelpFuncExcel.ExportDataltltToExcel(OutPutLtLt, "Time&Memory&Output", ParameterInitialize.strSavePath); MessageBox.Show("Done!"); }
/// <summary> /// 获取线状要素 /// </summary> /// <param name="intInterNum">Inter: Interpolation</param> /// <returns>在处理面状要素时,本程序将原面状要素的边界切开,按线状要素处理,处理完后再重新生成面状要素</returns> public List <CPolyline> GetTargetcpllt() { int intIterationNum = Convert.ToInt32(_DataRecords.ParameterInitialize.txtIterationNum.Text); int intInterNum = Convert.ToInt32(_DataRecords.ParameterInitialize.txtInterpolationNum.Text); List <CCorrCpts> pCorrCptsLt = _DataRecords.ParameterResult.CCorrCptsLt; //Read Datasets后,此处ResultPtLt中的对应点为一一对应 double dblTX = _dblTX; double dblInterval = 1 / Convert.ToDouble(intInterNum + 1); int intPtNum = pCorrCptsLt.Count; int intXYNum = intPtNum * 2; int intMultiXYNum = intInterNum * intXYNum; //计算长度初始值(全部计算) double[,] adblLength0 = new double[intInterNum, intPtNum - 1]; double[,] adblLength = new double[intInterNum, intPtNum - 1]; //顺便定义中间值数组 for (int j = 0; j < pCorrCptsLt.Count - 1; j++) { double dblfrsublength = CGeoFunc.CalDis(pCorrCptsLt[j + 1].FrCpt, pCorrCptsLt[j].FrCpt); double dbltosublength = CGeoFunc.CalDis(pCorrCptsLt[j + 1].ToCpt, pCorrCptsLt[j].ToCpt); for (int i = 0; i < intInterNum; i++) { double dblProp = (i + 1) * dblInterval; adblLength0[i, j] = (1 - dblProp) * dblfrsublength + dblProp * dbltosublength; } //pCorrCptsLt[j].FrCpt.isCtrl = false; //仅以最开始两对和最终两队对应点为固定点,故此先设置为false } //计算角度初始值(全部计算) double[,] adblAngle0 = new double[intInterNum, intPtNum - 2]; double[,] adblAngle = new double[intInterNum, intPtNum - 2]; for (int j = 0; j < pCorrCptsLt.Count - 2; j++) { //较大比例尺线状要素上的夹角 double dblfrAngle = CGeoFunc.CalAngle_Counterclockwise(pCorrCptsLt[j].FrCpt, pCorrCptsLt[j + 1].FrCpt, pCorrCptsLt[j + 2].FrCpt); //较小比例尺线状要素上的夹角 double dbltoAngle = CGeoFunc.CalAngle_Counterclockwise(pCorrCptsLt[j].ToCpt, pCorrCptsLt[j + 1].ToCpt, pCorrCptsLt[j + 2].ToCpt); //角度初始值 for (int i = 0; i < intInterNum; i++) { double dblProp = (i + 1) * dblInterval; adblAngle0[i, j] = (1 - dblProp) * dblfrAngle + dblProp * dbltoAngle; } } //多线段间对应顶点距离初始值(全部计算),全部设置为0 //目标值也设置为0 double[,] adblIntervalDis0 = new double[intInterNum + 1, intPtNum]; double[,] adblIntervalDis = new double[intInterNum + 1, intPtNum]; //顺便定义中间值数组 for (int j = 0; j < pCorrCptsLt.Count; j++) { //长度初始值 for (int i = 0; i <= intInterNum; i++) { adblIntervalDis0[i, j] = 0; adblIntervalDis[i, j] = 0; } } //计算坐标初始值,以及各线段方位角初始值 //注意:默认固定第一条边 pCorrCptsLt[0].FrCpt.isCtrl = true; pCorrCptsLt[1].FrCpt.isCtrl = true; VBMatrix X0 = new VBMatrix(intMultiXYNum, 1); double[,] adblAzimuth = new double[intInterNum, intPtNum - 1]; for (int i = 0; i < intInterNum; i++) { double dblProp = (i + 1) * dblInterval; double dblnewX0 = (1 - dblProp) * pCorrCptsLt[0].FrCpt.X + dblProp * pCorrCptsLt[0].ToCpt.X; double dblnewY0 = (1 - dblProp) * pCorrCptsLt[0].FrCpt.Y + dblProp * pCorrCptsLt[0].ToCpt.Y; double dblnewX1 = (1 - dblProp) * pCorrCptsLt[1].FrCpt.X + dblProp * pCorrCptsLt[1].ToCpt.X; double dblnewY1 = (1 - dblProp) * pCorrCptsLt[1].FrCpt.Y + dblProp * pCorrCptsLt[1].ToCpt.Y; adblAzimuth[i, 0] = CGeoFunc.CalAxisAngle(dblnewX0, dblnewY0, dblnewX1, dblnewY1); int intBasicIndex = i * intXYNum; X0[intBasicIndex + 0, 0] = dblnewX0; X0[intBasicIndex + 1, 0] = dblnewY0; X0[intBasicIndex + 2, 0] = dblnewX1; X0[intBasicIndex + 3, 0] = dblnewY1; } //其它点 //是否固定最后两个点 pCorrCptsLt[pCorrCptsLt.Count - 2].FrCpt.isCtrl = true; pCorrCptsLt[pCorrCptsLt.Count - 1].FrCpt.isCtrl = true; for (int j = 2; j < intPtNum; j++) { for (int i = 0; i < intInterNum; i++) { int intBasicIndexIJ = i * intXYNum + 2 * j; double dblProp = (i + 1) * dblInterval; X0[intBasicIndexIJ + 0, 0] = (1 - dblProp) * pCorrCptsLt[j].FrCpt.X + dblProp * pCorrCptsLt[j].ToCpt.X; X0[intBasicIndexIJ + 1, 0] = (1 - dblProp) * pCorrCptsLt[j].FrCpt.Y + dblProp * pCorrCptsLt[j].ToCpt.Y; double dblAngle = CGeoFunc.CalAngle_Counterclockwise(X0[intBasicIndexIJ - 4, 0], X0[intBasicIndexIJ - 3, 0], X0[intBasicIndexIJ - 2, 0], X0[intBasicIndexIJ - 1, 0], X0[intBasicIndexIJ - 0, 0], X0[intBasicIndexIJ + 1, 0]); //计算实际夹角 adblAzimuth[i, j - 1] = adblAzimuth[i, j - 2] + dblAngle - Math.PI; } } //for (int j = 2; j < intPtNum; j++) //{ // if (pCorrCptsLt[j].FrCpt.isCtrl == false) // { // for (int i = 0; i < intInterNum; i++) // { // int intBasicIndexI = i * intXYNum; // adblAzimuth[i, j - 1] = adblAzimuth[i, j - 2] + adblAngle0[i, j - 2] - Math.PI; // X0[intBasicIndexI + 2 * j + 0, 0] = X0[intBasicIndexI + 2 * (j - 1) + 0, 0] + adblLength0[i, j - 1] * Math.Cos(adblAzimuth[i, j - 1]); // X0[intBasicIndexI + 2 * j + 1, 0] = X0[intBasicIndexI + 2 * (j - 1) + 1, 0] + adblLength0[i, j - 1] * Math.Sin(adblAzimuth[i, j - 1]); // } // } // else // { // for (int i = 0; i < intInterNum; i++) // { // int intBasicIndexIJ = i * intXYNum + 2 * j; // double dblProp = (i + 1) * dblInterval; // X0[intBasicIndexIJ + 0, 0] = (1 - dblProp) * pCorrCptsLt[j].FrCpt.X + dblProp * pCorrCptsLt[j].ToCpt.X; // X0[intBasicIndexIJ + 1, 0] = (1 - dblProp) * pCorrCptsLt[j].FrCpt.Y + dblProp * pCorrCptsLt[j].ToCpt.Y; // double dblAngle = CGeoFunc.CalAngle_Counterclockwise(X0[intBasicIndexIJ - 4, 0], X0[intBasicIndexIJ - 3, 0], X0[intBasicIndexIJ - 2, 0], X0[intBasicIndexIJ - 1, 0], X0[intBasicIndexIJ - 0, 0], X0[intBasicIndexIJ + 1, 0]); //计算实际夹角 // adblAzimuth[i, j - 1] = adblAzimuth[i, j - 2] + dblAngle - Math.PI; // } // } //} //统计插值点数 int intKnownPt = 0; //固定点的数目 int intUnknownPt = 0; //非固定点的数目 List <int> intKnownLocationLt = new List <int>(); //记录已知点的序号 //注意:对于该循环,有一个默认条件,即FromCpl的第一个顶点只有一个对应点 for (int i = 0; i < intPtNum; i++) { if (pCorrCptsLt[i].FrCpt.isCtrl == true) { intKnownLocationLt.Add(i); intKnownPt += 1; } else { intUnknownPt += 1; } } int intUnknownXY = intUnknownPt * 2; //每个点都有X、Y坐标 int intMultiUnknownXY = intInterNum * intUnknownXY; //找出长度固定的位置(如果一个线段的前后两个点都固定,则该长度固定)。另外,长度固定则该边的方位角也固定 List <int> intKnownLengthLt = new List <int>(); for (int i = 0; i < intKnownLocationLt.Count - 1; i++) { if ((intKnownLocationLt[i + 1] - intKnownLocationLt[i]) == 1) { intKnownLengthLt.Add(intKnownLocationLt[i]); } } int intUnknownLength = intPtNum - 1 - intKnownLengthLt.Count; //找出角度固定的位置(如果一个固定顶点的前后两个点都固定,则该角度固定) List <int> intKnownAngleLt = new List <int>(); for (int i = 0; i < intKnownLocationLt.Count - 2; i++) { if ((intKnownLocationLt[i + 1] - intKnownLocationLt[i]) == 1 && (intKnownLocationLt[i + 2] - intKnownLocationLt[i + 1]) == 1) { intKnownAngleLt.Add(intKnownLocationLt[i]); } } int intUnknownAngle = intPtNum - 2 - intKnownAngleLt.Count; //长度角度未知量 int intUnknownLengthAngle = intUnknownLength + intUnknownAngle; //各未知量个数 int intMultiUnknownLength = intInterNum * intUnknownLength; int intMultiUnknownAngle = intInterNum * intUnknownAngle; int intMultiUnknownLengthAngle = intMultiUnknownLength + intMultiUnknownAngle; int intMultiUnknownInterval = (intInterNum + 1) * intUnknownPt; int intSumConstraints = intMultiUnknownLength + intMultiUnknownAngle + intMultiUnknownInterval; intMultiUnknownLength = 0; intMultiUnknownAngle = 0; intMultiUnknownLengthAngle = intMultiUnknownLength + intMultiUnknownAngle; intMultiUnknownInterval = (intInterNum + 1) * intUnknownPt; intSumConstraints = intMultiUnknownLength + intMultiUnknownAngle + intMultiUnknownInterval; //定义权重矩阵 VBMatrix P = new VBMatrix(intSumConstraints, intSumConstraints); for (int i = 0; i < intMultiUnknownLength; i++) //长度权重 { P[i, i] = 1; } for (int i = 0; i < intMultiUnknownAngle; i++) //角度权重 { P[intMultiUnknownLength + i, intMultiUnknownLength + i] = 40; } for (int i = 0; i < intMultiUnknownInterval; i++) //角度权重 { P[intMultiUnknownLengthAngle + i, intMultiUnknownLengthAngle + i] = 10000000000000; } //for (int i = 0; i < intInterNum; i++) //{ // int intBasicIndex2 = i * intUnknownLengthAngle; // for (int j = 0; j < intUnknownLength; j++) // { // P[intBasicIndex2 + j, intBasicIndex2 + j] = 1; // } // for (int j = 0; j < intUnknownAngle; j++) // { // P[intBasicIndex2 + intUnknownLength + j, intBasicIndex2 + intUnknownLength + j] = 1; // } //} //Xmix里存储了XA和X0的最新混合值(此矩阵在公式推导中并不存在,只是为了方便编写代码而建立) VBMatrix Xmix = new VBMatrix(intMultiXYNum, 1); for (int i = 0; i < intMultiXYNum; i++) { Xmix[i, 0] = X0[i, 0]; } //定义坐标近似值矩阵XA VBMatrix XA = new VBMatrix(intMultiUnknownXY, 1); VBMatrix XA0 = new VBMatrix(intMultiUnknownXY, 1); int intSumCount0 = 0; for (int j = 0; j < intUnknownPt; j++) { if (pCorrCptsLt[intSumCount0].FrCpt.isCtrl == false) { for (int i = 0; i < intInterNum; i++) { XA[i * intUnknownXY + j * 2 + 0, 0] = X0[i * intXYNum + intSumCount0 * 2 + 0, 0]; XA[i * intUnknownXY + j * 2 + 1, 0] = X0[i * intXYNum + intSumCount0 * 2 + 1, 0]; XA0[i * intUnknownXY + j * 2 + 0, 0] = XA[i * intUnknownXY + j * 2 + 0, 0]; XA0[i * intUnknownXY + j * 2 + 1, 0] = XA[i * intUnknownXY + j * 2 + 1, 0]; } } else { j -= 1; } intSumCount0 += 1; } //定义系数矩阵A(各方程对坐标的导数值),A的导数值将在循环中给出 VBMatrix A = new VBMatrix(intSumConstraints, intMultiUnknownXY); double dblJudge1 = 0; //该值用于判断是否应该跳出循环 double dblJudge2 = 0; //该值用于判断是否应该跳出循环 double dblJudge3 = 0; //该值用于判断是否应该跳出循环 int intJudgeIndex = intMultiUnknownXY / 4; int intIterativeCount = 0; for (int k = 0; k < 2; k++) { //break; do { if (intIterativeCount >= intIterationNum) { break; } intIterativeCount += 1; VBMatrix matl = new VBMatrix(intSumConstraints, 1); //计算系数矩阵A第0行到"intUnknownLength"行的各元素,即线段长度对各未知数求偏导的值 //先计算各分母值(注意:分母实际上是求偏导后的一部分值,但却恰好等于两点之间距离,因此其计算公式与距离计算公式相同 for (int i = 0; i < intInterNum; i++) { int intBasicIndexS1 = i * intXYNum; for (int j = 0; j < intPtNum - 1; j++) { int intBasicIndexIJS1 = intBasicIndexS1 + 2 * j; adblLength[i, j] = Math.Sqrt((Xmix[intBasicIndexIJS1 + 0, 0] - Xmix[intBasicIndexIJS1 + 2, 0]) * (Xmix[intBasicIndexIJS1 + 0, 0] - Xmix[intBasicIndexIJS1 + 2, 0]) + (Xmix[intBasicIndexIJS1 + 1, 0] - Xmix[intBasicIndexIJS1 + 3, 0]) * (Xmix[intBasicIndexIJS1 + 1, 0] - Xmix[intBasicIndexIJS1 + 3, 0])); } } //计算新的方位角 for (int i = 0; i < intInterNum; i++) { int intBasicIndexA1 = i * intXYNum; //第一条线段的方位角 adblAzimuth[i, 0] = CGeoFunc.CalAxisAngle(Xmix[intBasicIndexA1 + 0, 0], Xmix[intBasicIndexA1 + 1, 0], Xmix[intBasicIndexA1 + 2, 0], Xmix[intBasicIndexA1 + 3, 0]); //后面线段的方位角 for (int j = 1; j < intPtNum - 1; j++) { int intBasicIndexIJA1 = intBasicIndexA1 + 2 * j; double dblAngle = CGeoFunc.CalAngle_Counterclockwise(Xmix[intBasicIndexIJA1 - 2, 0], Xmix[intBasicIndexIJA1 - 1, 0], Xmix[intBasicIndexIJA1 + 0, 0], Xmix[intBasicIndexIJA1 + 1, 0], Xmix[intBasicIndexIJA1 + 2, 0], Xmix[intBasicIndexIJA1 + 3, 0]); adblAzimuth[i, j] = adblAzimuth[i, j - 1] + dblAngle - Math.PI; } } //计算新的多线段间对应顶点距离 for (int j = 0; j < intPtNum; j++) { int int2J = 2 * j; //源线段与第一生成线段间对应点距离 adblIntervalDis[0, j] = Math.Sqrt((pCorrCptsLt[j].FrCpt.X - Xmix[int2J + 0, 0]) * (pCorrCptsLt[j].FrCpt.X - Xmix[int2J + 0, 0]) + (pCorrCptsLt[j].FrCpt.Y - Xmix[int2J + 1, 0]) * (pCorrCptsLt[j].FrCpt.Y - Xmix[int2J + 1, 0])); //目标线段与最后生成线段间对应点距离 adblIntervalDis[intInterNum, j] = Math.Sqrt((pCorrCptsLt[j].ToCpt.X - Xmix[(intInterNum - 1) * intXYNum + int2J + 0, 0]) * (pCorrCptsLt[j].ToCpt.X - Xmix[(intInterNum - 1) * intXYNum + int2J + 0, 0]) + (pCorrCptsLt[j].ToCpt.Y - Xmix[(intInterNum - 1) * intXYNum + int2J + 1, 0]) * (pCorrCptsLt[j].ToCpt.Y - Xmix[(intInterNum - 1) * intXYNum + int2J + 1, 0])); //各生成线段间对应点距离 for (int i = 1; i < intInterNum; i++) { adblIntervalDis[i, j] = Math.Sqrt((Xmix[(i - 1) * intXYNum + int2J + 0, 0] - Xmix[i * intXYNum + int2J + 0, 0]) * (Xmix[(i - 1) * intXYNum + int2J + 0, 0] - Xmix[i * intXYNum + int2J + 0, 0]) + (Xmix[(i - 1) * intXYNum + int2J + 1, 0] - Xmix[i * intXYNum + int2J + 1, 0]) * (Xmix[(i - 1) * intXYNum + int2J + 1, 0] - Xmix[i * intXYNum + int2J + 1, 0])); } } ////计算系数矩阵中关于长度值的导数部分(注意:隐含的距离计算公式为后一个点的坐标减前一个点的坐标) //int intKnownCount2 = 0; //int intUnKnownCount2 = 0; //for (int j = 0; j < intUnknownLength; j++) //{ // int intSumCount = intKnownCount2 + intUnKnownCount2; // int intBasicIndexL2 = 2 * intUnKnownCount2; // if (pCorrCptsLt[intSumCount].FrCpt.isCtrl == false && pCorrCptsLt[intSumCount + 1].FrCpt.isCtrl == false) // { // for (int i = 0; i < intInterNum; i++) // { // A[i * intUnknownLength + j, i * intUnknownXY + intBasicIndexL2 + 0] = -Math.Cos(adblAzimuth[i, intSumCount]); // A[i * intUnknownLength + j, i * intUnknownXY + intBasicIndexL2 + 1] = -Math.Sin(adblAzimuth[i, intSumCount]); // A[i * intUnknownLength + j, i * intUnknownXY + intBasicIndexL2 + 2] = -A[i * intUnknownLength + j, i * intUnknownXY + intBasicIndexL2 + 0]; // A[i * intUnknownLength + j, i * intUnknownXY + intBasicIndexL2 + 3] = -A[i * intUnknownLength + j, i * intUnknownXY + intBasicIndexL2 + 1]; // matl[i * intUnknownLength + j, 0] =adblLength0[i, intSumCount]- adblLength[i, intSumCount]; //图方便,顺便计算matl // } // intUnKnownCount2 += 1; // } // else if (pCorrCptsLt[intSumCount].FrCpt.isCtrl == false && pCorrCptsLt[intSumCount + 1].FrCpt.isCtrl == true) // { // for (int i = 0; i < intInterNum; i++) // { // A[i * intUnknownLength + j, i * intUnknownXY + intBasicIndexL2 + 0] = -Math.Cos(adblAzimuth[i, intSumCount]); // A[i * intUnknownLength + j, i * intUnknownXY + intBasicIndexL2 + 1] = -Math.Sin(adblAzimuth[i, intSumCount]); // matl[i * intUnknownLength + j, 0] = adblLength0[i, intSumCount]- adblLength[i, intSumCount]; //图方便,顺便计算matl // } // intUnKnownCount2 += 1; // } // else if (pCorrCptsLt[intSumCount].FrCpt.isCtrl == true && pCorrCptsLt[intSumCount + 1].FrCpt.isCtrl == false) // { // for (int i = 0; i < intInterNum; i++) // { // //注意这种情况,由于"pCorrCptsLt[intSumCount].FrCpt.isCtrl == true"不占位子(即不占列),因此列序号依然为" 2 * intUnKnownCount + 0"和" 2 * intUnKnownCount + 1",而不是+2,+3 // A[i * intUnknownLength + j, i * intUnknownXY + intBasicIndexL2 + 0] = Math.Cos(adblAzimuth[i, intSumCount]); // A[i * intUnknownLength + j, i * intUnknownXY + intBasicIndexL2 + 1] = Math.Sin(adblAzimuth[i, intSumCount]); // matl[i * intUnknownLength + j, 0] =adblLength0[i, intSumCount]- adblLength[i, intSumCount]; //图方便,顺便计算matl // } // intKnownCount2 += 1; // } // else // { // intKnownCount2 += 1; // j -= 1; // } //} ////计算系数矩阵中关于夹角值的导数部分 //int intKnownCount3 = 0; //int intUnKnownCount3 = 0; //for (int j = 0; j < intUnknownAngle; j++) //{ // //真是太幸运了,虽然求两向量逆时针夹角时需分多种情况讨论,但各情况的导数形式却是一致的,节省了不少编程精力啊,哈哈 // int intSumCount = intKnownCount3 + intUnKnownCount3; // //常用数据准备 // double[] adblA2 = new double[intInterNum]; // double[] adblB2 = new double[intInterNum]; // for (int i = 0; i < intInterNum; i++) // { // adblA2[i] = adblLength[i, intSumCount + 0] * adblLength[i, intSumCount + 0]; // adblB2[i] = adblLength[i, intSumCount + 1] * adblLength[i, intSumCount + 1]; // } // //开始计算系数值,由于将以下三个情况排列组合将有八种情况,因此按如下方式计算 // if (pCorrCptsLt[intUnKnownCount3 + intKnownCount3].FrCpt.isCtrl == true && pCorrCptsLt[intUnKnownCount3 + intKnownCount3 + 1].FrCpt.isCtrl == true && pCorrCptsLt[intUnKnownCount3 + intKnownCount3 + 2].FrCpt.isCtrl == true) // { // intKnownCount3 += 1; // j -= 1; // } // else // { // for (int i = 0; i < intInterNum; i++) // { // int intBasicIndexFi3 = i * intXYNum + 2 * intSumCount; // double dblNewAngle = CGeoFunc.CalAngle_Counterclockwise(Xmix[intBasicIndexFi3 + 0, 0], Xmix[intBasicIndexFi3 + 1, 0], // Xmix[intBasicIndexFi3 + 2, 0], Xmix[intBasicIndexFi3 + 3, 0], // Xmix[intBasicIndexFi3 + 4, 0], Xmix[intBasicIndexFi3 + 5, 0]); // adblAngle[i, j] = dblNewAngle; // matl[intMultiUnknownLength + i * intUnknownAngle + j, 0] =adblAngle0[i, intSumCount]- dblNewAngle; //图方便,顺便计算matl // } // int intPreTrueNum = 0; // int intUnKnownCount3orginal = intUnKnownCount3; // int intKnownCount3orginal = intKnownCount3; // if (pCorrCptsLt[intUnKnownCount3orginal + intKnownCount3orginal + 0].FrCpt.isCtrl == false) // { // //X1,Y1的导数值(注意:该部分是减数,因此值为导数的负数) // for (int i = 0; i < intInterNum; i++) // { // A[intMultiUnknownLength + i * intUnknownAngle + j, i * intUnknownXY + 2 * intUnKnownCount3orginal + 0] = -(Xmix[i * intXYNum + 2 * intSumCount + 3, 0] - Xmix[i * intXYNum + 2 * intSumCount + 1, 0]) / adblA2[i]; // A[intMultiUnknownLength + i * intUnknownAngle + j, i * intUnknownXY + 2 * intUnKnownCount3orginal + 1] = (Xmix[i * intXYNum + 2 * intSumCount + 2, 0] - Xmix[i * intXYNum + 2 * intSumCount + 0, 0]) / adblA2[i]; // } // intUnKnownCount3 += 1; // } // else // { // intPreTrueNum += 1; // intKnownCount3 += 1; // } // if (pCorrCptsLt[intUnKnownCount3orginal + intKnownCount3orginal + 1].FrCpt.isCtrl == false) // { // //X2,Y2的导数值 // for (int i = 0; i < intInterNum; i++) // { // A[intMultiUnknownLength + i * intUnknownAngle + j, i * intUnknownXY + 2 * (intUnKnownCount3orginal - intPreTrueNum) + 2] = (Xmix[i * intXYNum + 2 * intSumCount + 5, 0] - Xmix[i * intXYNum + 2 * intSumCount + 3, 0]) / adblB2[i] // + (Xmix[i * intXYNum + 2 * intSumCount + 3, 0] - Xmix[i * intXYNum + 2 * intSumCount + 1, 0]) / adblA2[i]; // A[intMultiUnknownLength + i * intUnknownAngle + j, i * intUnknownXY + 2 * (intUnKnownCount3orginal - intPreTrueNum) + 3] = -(Xmix[i * intXYNum + 2 * intSumCount + 4, 0] - Xmix[i * intXYNum + 2 * intSumCount + 2, 0]) / adblB2[i] // - (Xmix[i * intXYNum + 2 * intSumCount + 2, 0] - Xmix[i * intXYNum + 2 * intSumCount + 0, 0]) / adblA2[i]; // } // } // else // { // intPreTrueNum += 1; // } // if (pCorrCptsLt[intUnKnownCount3orginal + intKnownCount3orginal + 2].FrCpt.isCtrl == false) // { // //X3,Y3的导数值 // for (int i = 0; i < intInterNum; i++) // { // A[intMultiUnknownLength + i * intUnknownAngle + j, i * intUnknownXY + 2 * (intUnKnownCount3orginal - intPreTrueNum) + 4] = -(Xmix[i * intXYNum + 2 * intSumCount + 5, 0] - Xmix[i * intXYNum + 2 * intSumCount + 3, 0]) / adblB2[i]; // A[intMultiUnknownLength + i * intUnknownAngle + j, i * intUnknownXY + 2 * (intUnKnownCount3orginal - intPreTrueNum) + 5] = (Xmix[i * intXYNum + 2 * intSumCount + 4, 0] - Xmix[i * intXYNum + 2 * intSumCount + 2, 0]) / adblB2[i]; // } // } // } //} //计算系数矩阵中关于多线段间对应顶点距离的导数部分(注意:隐含的距离计算公式为后一个点的坐标减前一个点的坐标) int intKnownCount4 = 0; int intUnKnownCount4 = 0; for (int j = 0; j < intUnknownPt; j++) { int intSumCount4 = intKnownCount4 + intUnKnownCount4; int intBasicIndexL4 = 2 * intUnKnownCount4; if (pCorrCptsLt[intSumCount4].FrCpt.isCtrl == false) { int l = 0; //源线段与第一生成线段间对应点距离导数 A[intMultiUnknownLengthAngle + l * intUnknownPt + j, (l - 0) * intUnknownXY + intBasicIndexL4 + 0] = (Xmix[l * intXYNum + 2 * intSumCount4 + 0, 0] - pCorrCptsLt[intSumCount4].FrCpt.X) / adblIntervalDis[l, intSumCount4]; A[intMultiUnknownLengthAngle + l * intUnknownPt + j, (l - 0) * intUnknownXY + intBasicIndexL4 + 1] = (Xmix[l * intXYNum + 2 * intSumCount4 + 1, 0] - pCorrCptsLt[intSumCount4].FrCpt.Y) / adblIntervalDis[l, intSumCount4]; matl[intMultiUnknownLengthAngle + l * intUnknownPt + j, 0] = adblIntervalDis0[l, intSumCount4] - adblIntervalDis[l, intSumCount4]; //图方便,顺便计算matl //最后生成线段与目标线段间对应点距离导数 l = intInterNum; A[intMultiUnknownLengthAngle + l * intUnknownPt + j, (l - 1) * intUnknownXY + intBasicIndexL4 + 0] = -(pCorrCptsLt[intSumCount4].ToCpt.X - Xmix[(l - 1) * intXYNum + 2 * intSumCount4 + 0, 0]) / adblIntervalDis[l, intSumCount4]; A[intMultiUnknownLengthAngle + l * intUnknownPt + j, (l - 1) * intUnknownXY + intBasicIndexL4 + 1] = -(pCorrCptsLt[intSumCount4].ToCpt.Y - Xmix[(l - 1) * intXYNum + 2 * intSumCount4 + 1, 0]) / adblIntervalDis[l, intSumCount4]; matl[intMultiUnknownLengthAngle + l * intUnknownPt + j, 0] = adblIntervalDis0[l, intSumCount4] - adblIntervalDis[l, intSumCount4]; //图方便,顺便计算matl //各生成线段间对应点距离导数 for (int i = 1; i < intInterNum; i++) { A[intMultiUnknownLengthAngle + i * intUnknownPt + j, (i - 1) * intUnknownXY + intBasicIndexL4 + 0] = -(Xmix[i * intXYNum + 2 * intSumCount4 + 0, 0] - Xmix[(i - 1) * intXYNum + 2 * intSumCount4 + 0, 0]) / adblIntervalDis[i, intSumCount4]; A[intMultiUnknownLengthAngle + i * intUnknownPt + j, (i - 1) * intUnknownXY + intBasicIndexL4 + 1] = -(Xmix[i * intXYNum + 2 * intSumCount4 + 1, 0] - Xmix[(i - 1) * intXYNum + 2 * intSumCount4 + 1, 0]) / adblIntervalDis[i, intSumCount4]; A[intMultiUnknownLengthAngle + i * intUnknownPt + j, (i - 0) * intUnknownXY + intBasicIndexL4 + 0] = -A[intMultiUnknownLengthAngle + i * intUnknownPt + j, (i - 1) * intUnknownXY + +intBasicIndexL4 + 0]; A[intMultiUnknownLengthAngle + i * intUnknownPt + j, (i - 0) * intUnknownXY + intBasicIndexL4 + 1] = -A[intMultiUnknownLengthAngle + i * intUnknownPt + j, (i - 1) * intUnknownXY + +intBasicIndexL4 + 1]; matl[intMultiUnknownLengthAngle + i * intUnknownPt + j, 0] = adblIntervalDis0[i, intSumCount4] - adblIntervalDis[i, intSumCount4]; //图方便,顺便计算matl //double dblIntervalDis = adblIntervalDis[i, intSumCount4]; //double dblIntervalDis0 = adblIntervalDis0[i, intSumCount4]; //double dblmatl = dblIntervalDis - dblIntervalDis0; //double ttt = 6; } intUnKnownCount4 += 1; } else { intKnownCount4 += 1; j -= 1; } } int tt = 5; //CHelpFuncExcel.ExportDataToExcel2(A, "matA", _DataRecords.ParameterInitialize.strSavePath); //CHelpFuncExcel.ExportDataToExcelP(P, "matP", _DataRecords.ParameterInitialize.strSavePath); //CHelpFuncExcel.ExportDataToExcel2(matl, "matl", _DataRecords.ParameterInitialize.strSavePath); //平差 VBMatrix Temp = A.Trans() * P * A; VBMatrix InvTemp = Temp.Inv(Temp); VBMatrix x = InvTemp * A.Trans() * P * matl; XA += x; CHelpFuncExcel.ExportDataToExcel2(x, "matx", _DataRecords.ParameterInitialize.strSavePath); CHelpFuncExcel.ExportDataToExcel2(XA, "matXA", _DataRecords.ParameterInitialize.strSavePath); //记录各平差成果 //坐标改正值 //VBMatrix Xc = XA - XA0; //观测值改正值矩阵V VBMatrix V = A * x - matl; //VtPV值 double dblVtPV = (V.Trans() * P * V).MatData[0, 0]; _DataRecords.ParameterInitialize.txtVtPV.Text = " VtPV = " + dblVtPV.ToString(); //VBMatrix L = new VBMatrix(intSumConstraints, 1); //for (int i = 0; i < intInterNum; i++) //{ // for (int j = 0; j < intUnknownLength; j++) // { // L[i * intUnknownLength + j, 0] = adblLength[i, j]; // } // for (int j = 0; j < intUnknownAngle; j++) // { // L[intInterNum * intUnknownLength + i * intUnknownAngle + j, 0] = adblAngle[i, j]; // } //} //for (int i = 0; i <= intInterNum; i++) //{ // for (int j = 0; j < intUnknownPt; j++) // { // L[intInterNum * intUnknownLengthAngle + i * intUnknownPt + j, 0] = adblIntervalDis[i, j]; // } //} //VBMatrix LPlusV = L + V; //VBMatrix AX = A * XA; //CHelpFuncExcel.ExportDataToExcel2(LPlusV, "matLPlusV", _DataRecords.ParameterInitialize.strSavePath); //CHelpFuncExcel.ExportDataToExcel2(AX, "matAX", _DataRecords.ParameterInitialize.strSavePath); //更新Xmix int intSumCount5 = 0; for (int j = 0; j < intUnknownPt; j++) { if (pCorrCptsLt[intSumCount5].FrCpt.isCtrl == false) { for (int i = 0; i < intInterNum; i++) { Xmix[i * intXYNum + intSumCount5 * 2 + 0, 0] = XA[i * intUnknownXY + j * 2 + 0, 0]; Xmix[i * intXYNum + intSumCount5 * 2 + 1, 0] = XA[i * intUnknownXY + j * 2 + 1, 0]; } } else { j -= 1; } intSumCount5 += 1; } //这里只是随便取两个中间值以观测是否收敛 dblJudge1 = Math.Abs(x[1 * intJudgeIndex, 0]); dblJudge2 = Math.Abs(x[2 * intJudgeIndex, 0]); dblJudge3 = Math.Abs(x[3 * intJudgeIndex, 0]); //} while ((dblJudge1 > dblTX) || (dblJudge2 > dblTX) || (dblJudge3 > dblTX)); }while ((dblJudge1 >= 0) || (dblJudge2 >= 0) || (dblJudge3 >= 0)); break; for (int i = 0; i < intMultiUnknownLength; i++) //长度权重 { P[i, i] = 1; } for (int i = 0; i < intMultiUnknownAngle; i++) //角度权重 { P[intMultiUnknownLength + i, intMultiUnknownLength + i] = 39.48; } for (int i = 0; i < intMultiUnknownInterval; i++) //角度权重 { P[intMultiUnknownLengthAngle + i, intMultiUnknownLengthAngle + i] = 1; } } //生成目标线段 List <CPolyline> cpllt = new List <CPolyline>(); for (int i = 0; i < intInterNum; i++) { List <CPoint> cptlt = new List <CPoint>(); for (int j = 0; j < intPtNum; j++) { CPoint cpt = new CPoint(j, Xmix[i * intXYNum + j * 2, 0], Xmix[i * intXYNum + j * 2 + 1, 0]); cptlt.Add(cpt); } CPolyline cpl = new CPolyline(i, cptlt); cpllt.Add(cpl); } return(cpllt); }