Восстановление рельефа местности по серии изображений методом факторизации матриц

Необходимость разработки программного комплекса. Обзор методов восстановления трёхмерных сцен: алгоритмы Shape from Shading. Сравнительный анализ методов восстановления 3D сцен. Перспективная проекция. Совмещение результатов восстановления с моделью.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 13.12.2012
Размер файла 8,7 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

13. Takeo Kanade Mei Han. Scene reconstruction from multiple uncalibrated views. Technical report, The Robotics Institute, Carnegie Mellon University, Pittsburgh, PA 15213, January 2000. CMU-RI-TR-00-09.

14. Chetverikov D. and Zsolt Szabo. A simple and efficient algorithm for detection of high curvature points in planar curves. In Proc. 23rd Workshop of the Austrian Pattern Recognition Group, pages 175--184, 1999.

15. Ramesh V., Bedekar A. S., Haralick R.M. and Zhang X. A bayesian corner Вetector: Theory and performance evaluation. Proceedings of 1994 ARPA Image Understanding Workshop, pages 703--715, 1994.

16. C. J. Poelman and T. Kanade. A paraperspective factorization method for shape and motion recovery. Technical report, Shool of Computer Science, Carnegie Mellon University., Pittsburgh, PA 15213, December 1993. CMU-CS-93-219.

17. J. Costeria and T. Kanade. A multi-body factorization method for motion analysis. Technical report, School of Computer Science, Carnegie Mellon University, Pittsburgh, PA 15213, September 1994. CMU-CS-TR-94-220.

18. C. Tomasi and T. Kanade. Shape and motion from image streams: a factorization method (orthographic method). Technical report, Shool of Computer Science, Carnegie Mellon University, Pittsburgh, PA 15213, 1992.

19. T. Morita and T. Kanade. A sequantual factorization method for recovering shape and motion from image streams. Proceedings of 1994 ARPA Image Understanding Workshop, 2:1177--1188, November 1994.

20. Takeo Kanade Carlo Tomasi. Shape and motion from image streams: a factorization method - part 3. Detection and tracking of point features. Technical report, School of Computer Science, Carnegie Mellon University, Pittsburgh, PA 15213, April 1991. CMU-CS-91-132.

21. Н. В. Янова, Д.В. Юрин. Итеративный алгоритм восстановления трехмерных сцен, движения и фокусного расстояния камеры в перспективной проекции, основанный на факторизации матриц. - В сб. Труды конференции. 12-я Международная конференция по Компьютерной графике и Машинному зрению ГрафиКон'2002 - стр. 123-129. Нижний Новгород, 2002.

22. Т. Кормен, Ч. Лейзерсон, Р. Ривест. Алгоритмы: построение и анализ. - М.: МЦНМО, 2001.

23. Бобков Н.И., Голованова Т.В. «Охрана труда на ВЦ: методические указания к дипломному проектированию», М.: Изд-во МАИ, 1991. - 28 с.: ил.

24. ГОСТ 12.1.005-88 Общие санитарно-гигиенические требования к воздуху рабочей

25. ГОСТ 12.1.003-83. Шум. Общие требования безопасности

26. СанПиН 2.2.2.542-96 Требования к электромагнитным полям дисплея

27. ГОСТ Р 50923-96. Дисплеи.

28. ГОСТ 12.1.058-82 - Предельно допустимые уровни напряжения и тока прикосновения.

29. ГОСТ Р 52324-2005. Эргономические требования к работе с визуальными дисплеями, основанными на плоских панелях. Часть 2. Эргономические требования к дисплеям с плоскими панелями.

Приложение А

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

// для работы с библиотекой OpenGL

using Tao.OpenGl;

// для работы с библиотекой FreeGLUT

using Tao.FreeGlut;

// для работы с элементом управления SimpleOpenGLControl

using Tao.Platform.Windows;

using alglib;

namespace Factoriz_SVD

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

AnT.InitializeContexts();

}

public double S_xmin = 0, S_xmax = 0, S_ymin = 0, S_ymax = 0, S_zmin = 0, S_zmax = 0;

public double[,] S = new double[3, 20];

private void button1_Click(object sender, EventArgs e)

{

/* int n=14, m=54; //n - stroki m-stolbci

double[,] ZW = new double[14,54] {

{317,342,365,391,418,443,467,495,518,315,340,366,394,417,444,471,495,312,337,365,392,418,445,471,500,305,333,362,390,418,446,474,503,530,311,364,417,474,525,316,366,419,470,519,320,368,418,471,516,322,371,419,467,514},

{318,342,368,392,417,442,468,492,517,314,341,365,391,417,443,469,494,310,337,364,390,417,446,472,501,306,332,361,390,417,445,476,503,530,311,364,419,473,525,314,366,419,471,520,318,368,419,470,517,321,370,419,468,513},

{323,347,371,395,418,442,466,490,514,318,344,368,394,418,443,469,491,315,339,367,391,419,445,471,498,309,336,364,391,419,447,474,502,529,313,365,419,473,525,316,367,419,472,522,319,369,420,469,518,324,371,420,468,515},

{326,348,371,394,417,440,463,486,508,321,347,370,394,417,440,466,487,317,341,368,392,418,443,468,495,312,338,365,391,418,444,472,498,523,315,366,418,470,520,318,369,417,469,517,321,369,419,468,516,323,370,418,466,513},

{332,353,374,395,416,439,460,482,505,328,350,372,395,417,440,463,484,323,345,370,394,417,442,465,490,317,342,368,393,418,443,468,493,518,320,369,418,468,515,322,370,418,466,514,324,371,418,466,511,326,371,418,464,510},

{338,357,377,397,417,439,458,478,498,334,356,375,397,417,438,459,480,330,350,374,395,418,440,462,485,324,348,371,395,418,441,465,488,510,326,372,418,464,510,327,373,418,463,508,327,373,418,463,507,330,374,418,462,505},

{347,363,382,400,417,435,453,471,488,344,362,380,399,419,436,455,473,341,358,379,398,418,438,457,477,336,356,377,397,418,438,459,479,500,336,377,418,459,499,337,377,418,459,498,337,377,418,459,498,337,377,418,459,498},

{71,72,72,71,71,70,71,70,71,126,108,126,108,126,107,126,107,167,189,166,187,166,188,167,188,233,233,233,233,233,232,231,231,239,265,264,263,265,263,296,294,292,291,292,319,320,320,320,320,344,345,343,345,342},

{74,72,71,71,71,71,70,70,72,124,106,124,106,125,107,125,107,165,185,164,184,164,186,164,185,229,228,228,228,227,227,227,226,227,262,262,261,262,261,293,293,292,292,291,320,319,320,319,320,344,344,344,344,342},

{78,79,78,78,78,78,78,78,78,120,105,120,106,120,105,120,105,151,167,151,168,151,168,151,167,204,202,203,203,203,203,203,202,202,244,243,243,243,243,281,281,281,281,281,316,314,315,315,316,349,349,348,348,348},

{84,85,85,85,86,86,86,86,84,119,107,118,107,119,107,118,107,144,157,143,156,143,156,143,156,185,185,186,185,185,185,185,186,185,228,228,228,227,228,269,270,269,269,269,308,309,307,307,308,345,344,344,344,344},

{95,96,97,95,97,96,97,95,97,121,113,122,112,121,112,121,112,140,149,139,149,139,149,139,149,171,170,169,170,170,171,170,170,170,215,214,214,212,215,257,256,257,257,258,298,298,298,298,297,337,336,335,337,335},

{108,108,109,109,108,109,108,108,109,124,121,124,120,125,121,124,119,138,145,138,145,137,145,138,145,160,159,159,160,160,160,159,159,159,204,204,204,203,203,246,245,246,245,246,287,286,287,287,287,325,326,326,326,325},

{128,128,128,128,129,127,127,127,127,134,132,135,132,135,132,135,132,140,143,140,143,140,143,140,143,150,150,150,150,150,150,150,150,150,191,191,191,191,191,230,231,230,230,230,269,269,269,269,269,307,307,307,307,307},

};*/

/*

int n = 16, m = 18;

double[,] ZW = new double[16, 18] {

{334,310,370,370,305,418,519,523,418,418,516,520,418,329,298,367,365,292},

{293,255,304,346,297,384,451,487,418,384,450,485,419,423,374,424,469,421},

{323,289,296,365,362,366,370,418,417,368,371,418,418,511,481,476,536,544},

{420,421,370,420,472,380,310,347,417,381,313,349,417,539,544,493,539,581},

{515,547,475,472,539,418,310,315,417,418,316,318,418,495,527,465,463,522},

{542,581,541,491,531,454,378,340,417,454,378,343,417,414,454,413,375,417},

{501,525,529,465,464,468,473,416,417,467,471,417,417,336,365,363,307,313},

{417,416,458,417,375,453,531,497,418,452,528,494,417,299,296,341,296,254},

{80,144,144,179,179,138,137,166,166,180,180,208,208,242,244,245,285,284},

{128,210,183,211,238,149,111,129,169,189,151,170,210,265,289,259,286,321},

{178,286,241,241,286,167,113,113,166,208,158,156,209,238,285,240,239,285},

{203,326,291,257,288,191,148,127,168,232,190,170,210,185,234,206,184,208},

{177,286,286,242,242,198,199,169,170,241,241,211,210,140,177,177,147,147},

{126,209,237,209,183,189,234,211,168,231,278,255,210,123,143,166,145,123},

{81,145,179,179,146,168,231,231,167,209,273,274,209,141,146,181,180,146},

{64,120,143,167,143,147,188,211,168,189,231,254,209,187,188,213,238,210},

};*/

/*

int n = 24, m = 63;

double[,] ZW = new double[24, 63] {

{384,417,449,485,519,555,359,383,427,462,500,537,297,340,380,421,464,503,243,290,336,378,430,474,246,308,403,474,246,310,403,474,247,310,400,472,247,311,400,473,249,290,334,378,426,473,503,535,554,502,536,553,305,535,554,502,534,553,494,512,526,543,553},

{394,424,461,493,531,563,358,393,433,466,501,540,293,334,374,418,459,499,237,281,324,367,413,462,237,298,391,462,238,298,391,461,239,301,390,462,240,302,390,460,241,283,323,367,413,460,498,541,563,499,540,563,498,538,561,498,537,562,487,508,529,547,562},

{404,436,469,503,538,572,367,400,436,466,505,543,292,331,369,412,452,492,226,270,314,357,399,447,229,287,376,446,229,289,377,445,230,290,376,446,232,292,378,446,232,274,313,354,398,444,492,543,573,493,542,572,492,540,572,492,542,571,478,505,529,552,569},

{415,451,480,513,548,582,372,405,440,474,509,546,291,328,366,406,446,483,220,261,300,338,385,427,222,277,361,426,223,277,362,427,225,280,360,427,226,282,361,427,228,263,301,341,383,425,484,545,582,484,545,581,484,544,580,484,543,579,466,499,529,555,578},

{374,408,439,474,508,542,347,384,420,455,493,531,293,342,384,426,469,510,257,305,353,398,445,492,259,323,419,492,259,324,419,491,259,325,419,490,260,327,419,490,261,305,350,395,442,490,510,530,542,510,530,541,509,529,541,509,530,541,504,514,525,535,540},

{372,405,440,474,507,543,346,382,421,457,493,531,302,344,381,424,467,510,255,302,349,396,443,490,256,321,416,489,257,322,417,490,258,324,416,488,258,324,416,489,259,303,347,392,440,488,509,531,543,509,531,543,509,530,542,509,531,542,501,514,525,534,542},

{376,410,447,480,514,548,352,387,425,460,496,530,297,338,382,424,467,507,252,296,343,392,435,484,252,318,412,485,253,319,412,484,254,319,412,484,254,321,411,482,256,297,341,387,434,482,509,534,549,508,535,548,508,533,547,507,533,547,500,512,525,538,547},

{430,459,493,524,557,592,379,411,445,478,515,547,292,328,363,398,438,472,215,253,288,326,365,406,217,267,344,406,219,269,346,406,220,272,346,406,222,273,347,407,223,257,291,328,365,406,472,547,591,472,546,590,473,545,589,474,543,587,453,492,527,559,587},

{443,472,503,535,567,598,389,421,450,481,514,547,294,328,361,395,429,461,214,247,280,314,349,386,215,261,330,387,218,263,332,387,219,265,332,388,221,266,332,389,222,252,283,316,351,387,462,547,597,462,546,595,463,544,595,463,543,594,440,484,524,560,593},

{458,483,513,542,573,603,397,425,456,484,515,545,299,329,359,389,423,450,215,245,271,303,334,369,216,256,319,369,219,258,320,370,220,261,320,370,222,262,322,370,223,250,277,306,338,370,451,545,602,452,545,601,453,542,598,453,542,598,428,476,520,561,597},

{467,493,520,548,575,605,406,431,459,484,515,543,302,330,356,383,415,440,217,243,269,296,324,355,219,255,309,354,221,258,311,355,223,259,312,355,225,260,313,356,226,248,274,300,327,357,441,542,606,442,541,603,443,538,602,443,538,599,416,468,515,559,597},

{484,505,531,555,582,608,419,442,465,487,514,536,313,335,358,381,408,426,228,248,267,289,312,336,229,257,300,336,231,258,302,337,231,260,303,337,234,263,305,339,235,253,273,293,315,347,427,537,605,426,536,604,428,533,603,429,532,601,403,456,509,556,599},

{121,122,125,125,126,128,129,131,133,133,136,138,145,147,149,152,153,157,163,164,167,169,169,174,196,200,205,209,229,231,237,243,257,263,270,274,288,294,302,308,317,312,326,330,334,340,189,166,154,218,192,178,249,218,200,279,242,226,318,294,275,257,246},

{116,118,120,122,122,124,126,129,130,133,135,139,147,147,151,153,155,158,163,166,170,172,175,178,197,201,208,213,228,235,243,247,257,266,276,281,288,296,306,313,316,322,328,332,339,343,193,165,151,222,192,176,251,219,198,281,245,221,318,296,277,259,242},

{112,114,116,119,121,121,124,127,129,132,133,138,145,149,152,155,159,164,165,167,173,176,181,184,198,205,214,220,229,237,248,254,259,268,279,288,288,298,310,320,316,323,329,337,343,351,196,166,149,225,194,174,254,220,198,284,245,223,323,300,278,259,245},

{109,111,114,116,120,123,122,125,128,132,135,140,145,149,153,157,161,167,166,170,175,181,185,193,197,206,217,228,229,238,252,263,259,269,283,295,287,299,314,327,314,322,331,339,346,356,200,168,149,231,195,174,259,221,198,289,248,222,328,303,281,262,244},

{126,127,129,129,128,131,134,134,136,137,137,138,149,148,149,150,150,152,159,161,161,163,163,163,193,195,197,199,225,227,231,233,255,259,263,266,286,290,295,298,314,317,320,323,326,329,184,166,156,214,191,180,244,217,203,272,240,226,307,290,273,255,247},

{127,127,127,128,130,130,134,135,136,136,137,139,146,147,150,150,151,154,159,160,162,162,164,166,192,195,198,200,224,228,231,234,255,260,265,267,286,290,296,300,314,318,320,324,327,330,186,165,155,214,190,178,243,218,202,271,240,226,309,290,273,258,248},

{126,126,126,128,130,130,134,135,134,137,138,141,147,149,150,153,153,156,161,163,164,169,167,171,193,198,202,203,228,229,236,239,257,263,267,271,289,292,297,304,317,321,322,327,331,334,187,167,154,218,193,178,246,217,203,275,244,226,311,293,276,259,247},

{102,108,111,116,119,124,118,123,128,132,136,142,142,148,155,159,165,172,166,171,177,184,192,198,196,210,221,234,227,239,254,267,256,268,285,300,282,298,315,330,310,318,328,339,349,360,204,171,149,235,197,175,263,224,198,292,248,224,331,306,283,264,245},

{103,107,112,116,121,125,116,123,128,133,139,145,143,149,155,162,169,178,165,171,180,188,196,205,196,208,225,238,225,237,256,271,252,265,286,302,279,294,315,333,304,314,326,336,348,361,208,174,151,238,201,177,268,227,201,294,253,225,333,308,286,265,247},

{101,106,111,116,122,128,116,122,127,135,140,148,140,148,156,163,170,182,163,171,180,188,199,209,192,206,226,241,220,235,256,272,247,262,285,303,273,288,313,332,296,308,319,332,346,359,212,176,153,240,203,179,294,254,201,294,253,226,332,308,286,266,248},

{101,105,113,120,126,134,116,124,130,137,145,153,142,150,158,166,175,187,163,172,180,191,202,213,192,204,226,245,217,233,256,274,243,260,284,304,268,286,311,331,290,302,312,328,342,359,217,182,158,244,207,183,270,232,207,296,257,230,332,308,289,271,251},

{103,111,118,126,133,142,119,126,133,143,151,162,141,151,160,168,179,192,158,170,180,191,203,216,186,201,226,245,212,227,253,272,233,254,278,300,257,276,304,325,279,290,305,319,334,350,220,187,166,246,212,191,270,237,213,296,260,235,326,308,289,272,257},

};*/

/*

int n = 10, m = 10;

double[,] ZW = new double[10, 10] {

{29,213,261,335,479,265,333,60,298,452},

{1319,1498,1534,1630,1766,1533,1622,1328,1560,1731},

{1718,1906,1925,2038,2167,1907,2013,1682,1914,2095},

{2778,2970,2969,3102,3219,2934,3054,2692,2919,3106},

{3758,3944,3943,4108,4221,3922,4076,3694,3925,4141},

{174,85,242,329,384,534,649,811,902,1028},

{307,222,378,476,536,675,803,949,1050,1190},

{549,476,637,758,827,941,1091,1207,1330,1492},

{773,709,870,1013,1090,1184,1352,1441,1578,1761},

{992,917,1077,1225,1295,1400,1573,1672,1802,1983},

};

/*int n = 22, m = 7;

double[,] ZW = new double[22, 7] {

{1256,1296,1227,1287,1209,1250,1246},

{1256,1296,1226,1287,1209,1250,1246},

{1256,1297,1225,1288,1207,1250,1246},

{1255,1300,1223,1290,1204,1249,1245},

{1254,1303,1221,1292,1200,1249,1244},

{1253,1305,1218,1294,1197,1248,1243},

{1252,1308,1214,1296,1194,1248,1242},

{1251,1311,1211,1299,1190,1248,1241},

{1250,1313,1208,1301,1187,1248,1240},

{1249,1314,1206,1302,1186,1249,1239},

{1249,1316,1206,1303,1186,1249,1239},

{745,640,671,726,738,767,735},

{746,639,670,727,739,768,736},

{745,639,669,729,740,771,735},

{747,635,668,732,742,776,737},

{747,632,667,736,747,783,737},

{748,631,666,742,752,791,738},

{749,631,666,749,757,799,739},

{750,632,668,757,764,808,740},

{751,636,671,764,770,815,741},

{752,639,674,770,775,819,742},

{752,641,675,772,776,821,742},

};*/

int n = 20, m = 20;

double[,] ZW = new double[20, 20] {

{144,390,195,605,269,267,521,522,391,890,764,851,939,1291,1418,748,455,1390,1214,1123},

{315,563,361,780,442,443,702,702,570,1012,965,1015,1148,1488,1652,956,625,1585,1405,1333},

{953,1191,997,1405,1083,1083,1337,1337,1210,1636,1612,1702,1793,2118,2288,1578,1252,2214,2033,1989},

{795,1044,831,1264,931,933,1206,1203,1068,1519,1501,1603,1698,2001,2194,1477,1102,2096,1915,1892},

{997,1235,999,1437,1094,1103,1384,1376,1241,1727,1721,1817,1912,2187,2453,1750,1274,2274,2094,2085},

{1470,1735,1530,1979,1671,1669,1949,1951,1809,2219,2273,2368,2463,2721,2847,2104,1814,2821,2647,2684},

{1958,2211,1990,2441,2130,2133,2420,2418,2273,2711,2775,2872,2970,3206,3385,2642,2274,3303,3125,3183},

{2219,2465,2240,2687,2387,2391,2677,2672,2536,2966,3044,3139,3234,3439,3656,2920,2521,3531,3356,3433},

{2425,2685,2504,2938,2688,2681,2949,2957,2815,3147,3276,3363,3451,3637,3672,2961,2775,3730,3576,3684},

{2636,2885,2705,3127,2893,2888,3149,3155,3021,3338,3479,3564,3648,3801,3858,3166,2969,3895,3746,3872},

{1965,2050,2197,2181,2334,2290,2245,2292,2281,1948,2124,2109,2092,2048,1430,1412,2184,2091,2141,2245},

{1542,1637,1774,1779,1911,1867,1840,1884,1866,1556,1726,1715,1704,1683,1068,1012,1774,1731,1772,1864},

{1376,1474,1605,1618,1738,1695,1672,1714,1695,1396,1560,1549,1536,1525,907,854,1610,1575,1614,1700},

{1337,1446,1575,1597,1713,1671,1651,1696,1674,1380,1539,1530,1522,1523,918,832,1587,1574,1608,1691},

{1202,1343,1448,1526,1597,1553,1569,1613,1574,1338,1493,1496,1499,1541,969,788,1493,1604,1616,1693},

{1181,1262,1420,1390,1539,1494,1442,1488,1481,1136,1281,1262,1241,1225,595,590,1399,1266,1321,1388},

{1320,1430,1569,1585,1700,1655,1632,1678,1657,1353,1502,1492,1482,1495,878,802,1576,1547,1584,1651},

{909,1028,1158,1190,1289,1245,1232,1276,1250,971,1116,1109,1103,1133,529,419,1174,1186,1216,1276},

{1036,1092,1268,1194,1357,1314,1234,1276,1285,920,1031,1002,973,965,350,414,1219,991,1059,1089},

{1011,1078,1244,1188,1334,1292,1222,1264,1268,926,1032,1008,984,985,397,429,1206,1018,1079,1104},

};

// int n = 4;

// int m = 860;

// double[,] ZW = new double[n, m];

double[,] Popravka = new double[3, 3] {{1,0,0},{0,1,0},{0,0,-1},};

double[,] ZWsr = new double[n, m];

double[,] ZWsr1 = new double[n, m];

double[,] ZWsrv = new double[n, m];

double[,] ZW1 = new double[n, m];

double[,] ZW2 = new double[n, m];

double[,] opt_alfa = new double[n, m];

double[,] koe = new double[n*n/2+1, 6];

double[,] M = new double[n, 3];

//------

double[,] M1 = new double[n/2, 3];

double[,,] G = new double[3, 3,n/2];

double[,] G1 = new double[3, 3];

double[,] H = new double[3, n/2];

double[,] Rez_K = new double[3, n / 2];

double[,] Rez_T = new double[3, n / 2];

double[,] Rez_I = new double[3, n / 2];

double[,] Rez_J = new double[3, n / 2];

double[,] M2 = new double[n / 2, 3];

double[,] M3 = new double[n / 2, 3];

double[,] MK = new double[n, 3];

double[,] SK = new double[3, m];

double[] i1 = new double[3];

double[] t1 = new double[3];

double[] Z = new double[n];

double[] j1 = new double[3];

double[] k1 = new double[3];

double[,] R0 = new double[3, 3];

double sum;

double[] Dli = new double[m];

double[] Dli2 = new double[m];

double gf = 0.1;

//------

//optimisation

double Sing1, Sing2,Sing3,Sing4,Sing5,Sing_m,ksi_p1,ksi_p2, ksi,ksi2,nach,kon;

double[,] MIN_W = new double[n, m];

bool opt_flag;

int jik,jik2,ii;

//----------

double[,] MV = new double[n, 3];

double[,] SV = new double[3, m];

double[] T = new double[n];

double[] b = new double[n * n / 2 + 1];

double[] W = new double[14];

double[] Rez1 = new double[6];

double[] X = new double[6];

double[] Visoti = new double[m];

double[,] U = new double[n, m];

double[,] VT = new double[n, m];

double[,] sigma = new double[3, 3];

double[,] sigmaQV = new double[3, 3];

double[,] Q = new double[3, 3];

double[,] Q1 = new double[3, 3];

double[,] QV = new double[3, 3];

double[,] QVT = new double[3, 3];

double[,] QVpr = new double[3, 3];

double[,] UT = new double[6, n * n / 2 + 1];

double[,] VTT = new double[6, 6];

double[,] ZWPROVr = new double[3, m];

double[,] ZWPROVr1 = new double[n, m];

double[,] ZWPROVa = new double[n, 3];

double[] alfaU = new double[n * m];

int q;

double alfa,alfa1,eps;

// double S_xmin=0, S_xmax=0, S_ymin=0, S_ymax=0, S_zmin=0, S_zmax=0;

Random r = new Random();

int i, j,k,flag,znak;

int info=0;

bool Fl;

int h = 0;

matinv.matinvreport per;

//isx. dannie

/* StreamReader f = new StreamReader("Koordin.txt");

string s;

const int n1 = 4;

int flg=0;

double[] a = new double[n1];

string[] buf;

while ((s = f.ReadLine()) != null)

{

buf = s.Split(' ');

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

{

a[i] = Convert.ToDouble(buf[i]);

}

ZW[0, flg] = a[0];

ZW[2, flg] = a[1];

ZW[1, flg] = a[2];

ZW[3, flg] = a[3];

flg+=1;

}

f.Close();*/

per.r1 = 0.0;

per.rinf = 0.0;

eps = 0;

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

for (j = 0; j < m; j++)

{

ZW1[i, j] = ZW[i,j];

}

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

{

T[i] = 0.0;

}

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

for (j = 0; j < m; j++)

{

ZW2[i, j] = 0;

}

////-----------------------------------------iteracii-----------------------------

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

for (j = 0; j < m; j++)

{

T[i] += ZW[i, j]; // vicheslenie T

}

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

for (j = 0; j < m; j++)

{

ZWsr[i, j] = ZW[i, j] - T[i] / m; // vicheslenie W-T

}

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

for (j = 0; j < m; j++)

{

ZWsr1[i, j] = ZW[i, j] - T[i] / m; // vicheslenie W-T

}

richTextBox1.Text += Environment.NewLine;

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

for (j = 0; j < m; j++)

{

if (j == 0)

richTextBox1.Text += Environment.NewLine;

// richTextBox1.Text = richTextBox1.Text + ZWsr[i, j].ToString("N4") + " ";

}

ksi2 = 10000;

jik2 = 0;

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

for (j = 0; j < m; j++)

{

ZWPROVr1[i, j] = 0;

}

opt_flag = false;

ksi = 0;

alfa = 0;

znak = 1;

while (true)

{

/*

richTextBox1.Text += Environment.NewLine;

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

for (j = 0; j < m; j++)

{

if (j == 0)

richTextBox1.Text += Environment.NewLine;

richTextBox1.Text = richTextBox1.Text + ZWsr[i, j] + " ";

}

richTextBox1.Text += Environment.NewLine;

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

for (j = 0; j < m; j++)

{

if (j == 0)

richTextBox1.Text += Environment.NewLine;

richTextBox1.Text = richTextBox1.Text + ZWPROVr1[i, j] + " ";

}

*/

ksi = 0;

if(opt_flag==true)

{

//--------------------------------------------------------------------------------minimizacia оптимизацией алфа

/* for (i = 0; i < n; i++)

for (j = 0; j < m; j++)

{

alfa =alfa+(ZWsr1[i, j] - ZWPROVr1[i, j]);

// alfa += ZWsr1[i, j];

//alfa += ZWPROVr1[i, j];

}

if (alfa < 0.0)

{

znak = -1;

richTextBox1.Text += Environment.NewLine;

richTextBox1.Text = richTextBox1.Text + "!++++++++++++++++++++++++++++++++++++++++++++++++++++! " + alfa.ToString("N4");

}

else

{

znak = 1;

richTextBox1.Text += Environment.NewLine;

richTextBox1.Text = richTextBox1.Text + "!-------------------------------------------------! " + alfa.ToString("N4");

}

alfa = 0;*/

Sing1 = 0.0;

Sing2 = 0.0;

Sing3 = 0.0;

Sing4 = 0.0;

Sing5 = 0.0;

Sing_m = 10000;

// nach = ksi2-0.013504;

// kon = ksi2 +0.013504;

nach = ksi2 - 0.00001;

kon = ksi2 + 0.00001;

jik = 0;

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

for (j = 0; j < m; j++)

MIN_W[i, j] = ZWsr1[i, j] + znak*nach * ZWPROVr1[i, j];

alglib.svd.rmatrixsvd(MIN_W, n, m, 1, 1, 2, ref W, ref U, ref VT);

if (W[0] == 0) W[0] = 0.000001;

Sing1 = W[3] / W[0];

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

for (j = 0; j < m; j++)

MIN_W[i, j] = ZWsr1[i, j] + znak * kon * ZWPROVr1[i, j];

alglib.svd.rmatrixsvd(MIN_W, n, m, 1, 1, 2, ref W, ref U, ref VT);

if (W[2] == 0) W[0] = 0.000001;

Sing2 = W[3] / W[0];

while (true)

{

ksi = nach + (kon - nach) / 2;

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

for (j = 0; j < m; j++)

MIN_W[i, j] = ZWsr1[i, j] + znak * ksi * ZWPROVr1[i, j];

alglib.svd.rmatrixsvd(MIN_W, n, m, 1, 1, 2, ref W, ref U, ref VT);

if (W[0] == 0) W[0] = 0.000001;

Sing3 = W[3] / W[0];

ksi_p1 = nach + (nach + (kon - nach) / 2 - nach) / 2;

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

for (j = 0; j < m; j++)

MIN_W[i, j] = ZWsr1[i, j] + znak * ksi_p1 * ZWPROVr1[i, j];

alglib.svd.rmatrixsvd(MIN_W, n, m, 1, 1, 2, ref W, ref U, ref VT);

if (W[0] == 0) W[0] = 0.000001;

Sing4 = W[3] / W[0];

ksi_p2 = nach + (kon - nach) / 2 + (kon - (nach + (kon - nach) / 2)) / 2;

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

for (j = 0; j < m; j++)

MIN_W[i, j] = ZWsr1[i, j] + znak * ksi_p2 * ZWPROVr1[i, j];

alglib.svd.rmatrixsvd(MIN_W, n, m, 1, 1, 2, ref W, ref U, ref VT);

if (W[0] == 0) W[0] = 0.000001;

Sing5 = W[3] / W[0];

/*

richTextBox1.Text += Environment.NewLine;

richTextBox1.Text += Environment.NewLine;

richTextBox1.Text = richTextBox1.Text + "nach " + nach;

richTextBox1.Text += Environment.NewLine;

richTextBox1.Text = richTextBox1.Text + "Sing1 " + Sing1;

richTextBox1.Text += Environment.NewLine;

richTextBox1.Text = richTextBox1.Text + "kon " + kon;

richTextBox1.Text += Environment.NewLine;

richTextBox1.Text = richTextBox1.Text + "Sing2 " + Sing2;

richTextBox1.Text = richTextBox1.Text + "ksi " + ksi;

richTextBox1.Text += Environment.NewLine;

richTextBox1.Text = richTextBox1.Text + "Sing3 " + Sing3;

richTextBox1.Text += Environment.NewLine;

richTextBox1.Text += Environment.NewLine;

richTextBox1.Text = richTextBox1.Text + "ksi_p1 " + ksi_p1;

richTextBox1.Text += Environment.NewLine;

richTextBox1.Text = richTextBox1.Text + "Sing4 " + Sing4;

richTextBox1.Text += Environment.NewLine;

richTextBox1.Text = richTextBox1.Text + "ksi_p2 " + ksi_p2;

richTextBox1.Text += Environment.NewLine;

richTextBox1.Text = richTextBox1.Text + "Sing5 " + Sing5;

richTextBox1.Text += Environment.NewLine;

richTextBox1.Text = richTextBox1.Text + "Sing_m " + Sing_m;

*/

if (Math.Abs(Sing3 - Sing_m) < 0.0001)

break;

if (Sing4 < Sing5)

{

kon = ksi;

}

else

{

nach = ksi;

Sing_m = Sing3;

}

jik += 1;

/*

if (jik == 10)

break;

*/

}

}

opt_flag = true;

/* for (i = 0; i < n; i++)

for (j = 0; j < m; j++)

{

opt_alfa[i,j]=ZWPROVr1[i,j]/ZWsr1[i,j];

}

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

for (j = 0; j < m; j++)

{

eps = eps+opt_alfa[i,j];

}

eps = eps / (n * m);*/

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

for (j = 0; j < m; j++)

ZWsr[i, j] = ZWsr1[i, j] + znak * ksi * ZWPROVr1[i, j];

/* for (i = 0; i < n; i++)

for (j = 0; j < m; j++)

ZWsr[i, j] = ZWsr1[i, j] - eps * ZWPROVr1[i, j];

ksi = eps;

richTextBox1.Text += Environment.NewLine;

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

for (j = 0; j < m; j++)

{

if (j == 0)

richTextBox1.Text += Environment.NewLine;

// richTextBox1.Text = richTextBox1.Text + ZWsr[i, j] +" ф ";

}

richTextBox1.Text += Environment.NewLine;

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

for (j = 0; j < m; j++)

{

if (j == 0)

richTextBox1.Text += Environment.NewLine;

// richTextBox1.Text = richTextBox1.Text + ZWPROVr1[i, j] + " ы ";

}

richTextBox1.Text += Environment.NewLine;

// richTextBox1.Text = richTextBox1.Text + "ksi " + ksi;

richTextBox1.Text += Environment.NewLine;

*/

alglib.svd.rmatrixsvd(ZWsr, n, m, 1, 1, 2, ref W, ref U, ref VT); // свд разложение матрицы W'

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

if (i > 2) W[i] = 0; // obnulenie singularnih 4isel

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

for (j = 0; j < 3; j++)

{

if (i == j)

sigma[i, j] = Math.Sqrt(W[i]); // sigularnie 4isla

else sigma[i, j] = 0.0;

}

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

for (j = 0; j < 3; j++)

{

MV[i, j] = 0;

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

MV[i, j] += (U[i, k] * sigma[k, j]); // m s volnoj

}

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

for (j = 0; j < m; j++)

{

SV[i, j] = 0;

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

SV[i, j] += (sigma[i, k] * VT[k, j]);

}

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

for (j = 0; j < m; j++)

{

ZWsrv[i, j] = 0;

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

ZWsrv[i, j] += (MV[i, k] * SV[k, j]);

}

//-----koefficienti

for (i = 0; i < n * n / 2 + 1; i++)

b[i] = 0;

b[n * n / 2] = 1;

flag = 0;

for (i = 0; i < n / 2; i++)

for (j = 0; j < n / 2; j++)

{

/*

koe[flag, 0] = MV[i, 0] * MV[j + n / 2, 0];

koe[flag, 1] = MV[i, 0] * MV[j + n / 2, 1];

koe[flag, 2] = MV[i, 0] * MV[j + n / 2, 2];

koe[flag, 3] = MV[i, 1] * MV[j + n / 2, 0];

koe[flag, 4] = MV[i, 1] * MV[j + n / 2, 1];

koe[flag, 5] = MV[i, 1] * MV[j + n / 2, 2];

koe[flag, 6] = MV[i, 2] * MV[j + n / 2, 0];

koe[flag, 7] = MV[i, 2] * MV[j + n / 2, 1];

koe[flag, 8] = MV[i, 2] * MV[j + n / 2, 2];

*/

koe[flag, 0] = MV[i, 0] * MV[j + n / 2, 0];

koe[flag, 1] = MV[i, 0] * MV[j + n / 2, 1] + MV[i, 1] * MV[j + n / 2, 0];

koe[flag, 2] = MV[i, 0] * MV[j + n / 2, 2] + MV[i, 2] * MV[j + n / 2, 0];

koe[flag, 3] = MV[i, 1] * MV[j + n / 2, 1];

koe[flag, 4] = MV[i, 1] * MV[j + n / 2, 2] + MV[i, 2] * MV[j + n / 2, 1];

koe[flag, 5] = MV[i, 2] * MV[j + n / 2, 2];

flag += 1;

}

for (i = 0; i < n / 2; i++)

for (j = 0; j < n / 2; j++)

{

/*

koe[flag, 0] = MV[i, 0] * MV[j, 0] - MV[i + n / 2, 0] * MV[j + n / 2, 0];

koe[flag, 1] = MV[i, 0] * MV[j , 1] - MV[i + n / 2, 0] * MV[j + n / 2, 0];

koe[flag, 2] = MV[i, 0] * MV[j , 2] - MV[i + n / 2, 0] * MV[j + n / 2, 0];

koe[flag, 3] = MV[i, 1] * MV[j , 0] - MV[i + n / 2, 0] * MV[j + n / 2, 0];

koe[flag, 4] = MV[i, 1] * MV[j , 1] - MV[i + n / 2, 0] * MV[j + n / 2, 0];

koe[flag, 5] = MV[i, 1] * MV[j , 2] - MV[i + n / 2, 0] * MV[j + n / 2, 0];

koe[flag, 6] = MV[i, 2] * MV[j , 0] - MV[i + n / 2, 0] * MV[j + n / 2, 0];

koe[flag, 7] = MV[i, 2] * MV[j , 1] - MV[i + n / 2, 0] * MV[j + n / 2, 0];

koe[flag, 8] = MV[i, 2] * MV[j , 2] - MV[i + n / 2, 0] * MV[j + n / 2, 0];

*/

koe[flag, 0] = MV[i, 0] * MV[j, 0] - MV[i + n / 2, 0] * MV[j + n / 2, 0];

koe[flag, 1] = MV[i, 0] * MV[j, 1] - MV[i + n / 2, 0] * MV[j + n / 2, 0] + MV[i, 1] * MV[j, 0] - MV[i + n / 2, 0] * MV[j + n / 2, 0];

koe[flag, 2] = MV[i, 0] * MV[j, 2] - MV[i + n / 2, 0] * MV[j + n / 2, 0] + MV[i, 2] * MV[j, 0] - MV[i + n / 2, 0] * MV[j + n / 2, 0];

koe[flag, 3] = MV[i, 1] * MV[j, 1] - MV[i + n / 2, 0] * MV[j + n / 2, 0];

koe[flag, 4] = MV[i, 1] * MV[j, 2] - MV[i + n / 2, 0] * MV[j + n / 2, 0] + MV[i, 2] * MV[j, 1] - MV[i + n / 2, 0] * MV[j + n / 2, 0];

koe[flag, 5] = MV[i, 2] * MV[j, 2] - MV[i + n / 2, 0] * MV[j + n / 2, 0];

flag += 1;

}

/*

koe[flag, 0] = MV[1, 0] * MV[1, 0];

koe[flag, 1] = MV[1, 0] * MV[1, 1];

koe[flag, 2] = MV[1, 0] * MV[1, 2];

koe[flag, 3] = MV[1, 1] * MV[1, 0];

koe[flag, 4] = MV[1, 1] * MV[1, 1];

koe[flag, 5] = MV[1, 1] * MV[1, 2];

koe[flag, 6] = MV[1, 2] * MV[1, 0];

koe[flag, 7] = MV[1, 2] * MV[1, 1];

koe[flag, 8] = MV[1, 2] * MV[1, 2];

*/

koe[flag, 0] = MV[0, 0] * MV[0, 0];

koe[flag, 1] = MV[0, 0] * MV[0, 1] + MV[0, 1] * MV[0, 0];

koe[flag, 2] = MV[0, 0] * MV[0, 2] + MV[0, 2] * MV[0, 0];

koe[flag, 3] = MV[0, 1] * MV[0, 1];

koe[flag, 4] = MV[0, 1] * MV[0, 2] + MV[0, 2] * MV[0, 1];

koe[flag, 5] = MV[0, 2] * MV[0, 2];

alglib.svd.rmatrixsvd(koe, n * n / 2 + 1, 6, 1, 1, 2, ref W, ref U, ref VT);

// richTextBox1.Text += Environment.NewLine;

// richTextBox1.Text += Environment.NewLine;

for (i = 0; i < n * n / 2 + 1; i++)

for (j = 0; j < 6; j++)

{

UT[j, i] = U[i, j];

}

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

for (j = 0; j < 6; j++)

{

VTT[j, i] = VT[i, j];

}

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

// for (j = 0; j < 3; j++)

{

Rez1[i] = 0;

for (k = 0; k < n * n / 2 + 1; k++)

Rez1[i] += (UT[i, k] * b[k]);

}

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

{

Rez1[i] = Rez1[i] / W[i];

}

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

// for (j = 0; j < 3; j++)

{

X[i] = 0;

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

X[i] += (Rez1[k] * VTT[k, i]);

}

QV[0, 0] = X[0];

QV[1, 1] = X[3];

QV[2, 2] = X[5];

QV[0, 1] = X[1];

QV[0, 2] = X[2];

QV[1, 0] = X[1];

QV[1, 2] = X[4];

QV[2, 0] = X[2];

QV[2, 1] = X[4];

alglib.svd.rmatrixsvd(QV, 3, 3, 1, 1, 2, ref W, ref U, ref VT);

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

for (j = 0; j < 3; j++)

{

if (i == j)

sigmaQV[i, j] = Math.Sqrt(W[i]);

else sigmaQV[i, j] = 0.0;

}

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

for (j = 0; j < 3; j++)

{

Q[i, j] = 0;

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

Q[i, j] += (U[i, k] * sigmaQV[k, j]);

}

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

for (j = 0; j < 3; j++)

{

Q1[i, j] = Q[i, j];

}

alglib.matinv.rmatrixinverse(ref Q, 3, ref info, ref per);

//--------------------------------------proverka reschenija--------------------------------------

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

for (j = 0; j < 3; j++)

{

M[i, j] = 0;

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

M[i, j] += (MV[i, k] * Q1[k, j]);

}

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

for (j = 0; j < m; j++)

{

S[i, j] = 0;

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

S[i, j] += (Q[i, k] * SV[k, j]);

}

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

for (j = 0; j < m; j++)

SK[i, j] = SV[i, j];

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

for (j = 0; j < 3; j++)

MK[i, j] = MV[i, j];

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

for (j = 0; j < m; j++)

S[i, j] = SV[i, j];

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

for (j = 0; j < 3; j++)

M[i, j] = MV[i, j];

//27OCT2010

gf = 1/10;

gf = 1/ksi2;

for (i = 0; i < n / 2; i++)

{

MK[i, 0] *= Math.Sqrt(1 + (T[i] * T[i]) / (m * m * gf * gf)) / Math.Sqrt(MK[i, 0] * MK[i, 0] + MK[i, 1] * MK[i, 1] + MK[i, 2] * MK[i, 2]);

MK[i, 1] *= Math.Sqrt(1 + (T[i] * T[i]) / (m * m * gf * gf)) / Math.Sqrt(MK[i, 0] * MK[i, 0] + MK[i, 1] * MK[i, 1] + MK[i, 2] * MK[i, 2]);

MK[i, 2] *= Math.Sqrt(1 + (T[i] * T[i]) / (m * m * gf * gf)) / Math.Sqrt(MK[i, 0] * MK[i, 0] + MK[i, 1] * MK[i, 1] + MK[i, 2] * MK[i, 2]);

MK[i + n / 2, 0] *= Math.Sqrt(1 + (T[i] * T[i]) / (m * m * gf * gf)) / Math.Sqrt(MK[i + n / 2, 0] * MK[i + n / 2, 0] + MK[i + n / 2, 1] * MK[i + n / 2, 1] + MK[i + n / 2, 2] * MK[i + n / 2, 2]);

MK[i + n / 2, 1] *= Math.Sqrt(1 + (T[i] * T[i]) / (m * m * gf * gf)) / Math.Sqrt(MK[i + n / 2, 0] * MK[i + n / 2, 0] + MK[i + n / 2, 1] * MK[i + n / 2, 1] + MK[i + n / 2, 2] * MK[i + n / 2, 2]);

MK[i + n / 2, 2] *= Math.Sqrt(1 + (T[i] * T[i]) / (m * m * gf * gf)) / Math.Sqrt(MK[i + n / 2, 0] * MK[i + n / 2, 0] + MK[i + n / 2, 1] * MK[i + n / 2, 1] + MK[i + n / 2, 2] * MK[i + n / 2, 2]);

}

for (i = 0; i < n / 2; i++)

{

G[0, 0, i] = MK[i, 1] * MK[i + n / 2, 2] - MK[i, 2] * MK[i + n / 2, 1];

G[0, 1, i] = MK[i, 2] * MK[i + n / 2, 0] - MK[i, 0] * MK[i + n / 2, 2];

G[0, 2, i] = MK[i, 0] * MK[i + n / 2, 1] - MK[i, 1] * MK[i + n / 2, 0];

G[1, 0, i] = MK[i, 0];

G[1, 1, i] = MK[i, 1];

G[1, 2, i] = MK[i, 2];

G[2, 0, i] = MK[i + n / 2, 0];

G[2, 1, i] = MK[i + n / 2, 1];

G[2, 2, i] = MK[i + n / 2, 2];

}

for (i = 0; i < n / 2; i++)

{

H[0, i] = 1;

H[1, i] = -T[i]/(gf*m);

H[2, i] = -T[i + n / 2]/(gf*m);

}

for (i = 0; i < n / 2; i++)

{

for (j = 0; j < 3; j++)

for (q = 0; q < 3; q++)

G1[j, q] = G[j, q, i];

alglib.matinv.rmatrixinverse(ref G1, 3, ref info, ref per);

for (j = 0; j < 3; j++)

{

Rez_K[j, i] = 0;

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

Rez_K[j, i] += (G1[j, k] * H[k, i]);

}

}

for (i = 0; i < n / 2; i++)

{

Z[i] = Math.Sqrt(MK[i, 0] * MK[i, 0] + MK[i, 1] * MK[i, 1] + MK[i, 2] * MK[i, 2]) * Math.Sqrt(MK[i, 0] * MK[i, 0] + MK[i, 1] * MK[i, 1] + MK[i, 2] * MK[i, 2]) / (1 + T[i] * T[i]/(m*m));

Z[i] = 1 / Math.Sqrt(Z[i]);

}

for (i = 0; i < n / 2; i++)

for (j = 0; j < 3; j++)

{

Rez_T[j, i] = (Rez_K[j, i]*gf) / Z[i];

}

for (i = 0; i < n/2; i++)

for (j = 0; j < m; j++)

{

ZWPROVr1[i, j] =(Rez_T[0,i]*SK[0,j]+Rez_T[1,i]*SK[1,j]+Rez_T[2,i]*SK[2,j]);

}

for (i = n/2; i < n; i++)

for (j = 0; j < m; j++)

{

ZWPROVr1[i, j] = (Rez_T[0, i-n/2] * SK[0, j] + Rez_T[1, i-n/2] * SK[1, j] + Rez_T[2, i-n/2] * SK[2, j]);

}

/*

richTextBox1.Text += Environment.NewLine;

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

for (j = 0; j < m; j++)

{

if (j == 0)

richTextBox1.Text += Environment.NewLine;

richTextBox1.Text = richTextBox1.Text + ZWPROVr1[i, j] + "k ";

}

*/

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

for (j = 0; j < m; j++)

{

ZWPROVr1[i, j] = 0;

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

ZWPROVr1[i, j] += (M[i, k] * S[k, j]);

}

/*

richTextBox1.Text += Environment.NewLine;

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

for (j = 0; j < m; j++)

{

if (j == 0)

richTextBox1.Text += Environment.NewLine;

richTextBox1.Text = richTextBox1.Text + ZWPROVr1[i, j] + " ";

}

*/

// richTextBox1.Text += Environment.NewLine;

// richTextBox1.Text = richTextBox1.Text +"ksi"+ ksi;

// richTextBox1.Text += Environment.NewLine;

// richTextBox1.Text = richTextBox1.Text + ksi2;

// richTextBox1.Text += Environment.NewLine;

if (Math.Abs(ksi2 - ksi) < 0.000001)

break;

jik2 += 1;

richTextBox1.Text += Environment.NewLine;

// richTextBox1.Text = richTextBox1.Text + jik2;

if (jik2 == 10)

{

break;

}

ksi2 = ksi;

//richTextBox1.Text += Environment.NewLine;

//richTextBox1.Text = richTextBox1.Text + "ksi2 " + ksi2;

} //while первый

if (ksi2 < 0)

{

ksi2 *= -1;

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

for (j = 0; j < 3; j++)

{

ZWPROVr1[i, j] = 0;

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

ZWPROVr1[i, j] += (M[i, k] * Popravka[k, j]);

}

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

for (j = 0; j < m; j++)

{

ZWPROVr1[i, j] = 0;

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

{

ZWPROVr1[i, j] += (Popravka[i, k] * S[k, j]);

}

}

}

richTextBox1.Text += Environment.NewLine;

// richTextBox1.Text = richTextBox1.Text + "Konec ";

richTextBox1.Text += Environment.NewLine;

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

for (j = 0; j < m; j++)

{

ZWPROVr1[i, j] = 0;

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

ZWPROVr1[i, j] += (M[i, k] * S[k, j]);

}

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

for (j = 0; j < m; j++)

{

if (j == 0)

richTextBox1.Text += Environment.NewLine;

// richTextBox1.Text = richTextBox1.Text + ZWPROVr1[i, j].ToString("N4") + " ";

}

richTextBox1.Text += Environment.NewLine;

// richTextBox1.Text = richTextBox1.Text + "ksi2 " + ksi2;

//---------------08.10.10-------

/*

for (i = 0; i < n / 2; i++)

for (j = 0; j < 3; j++)

{

M1[i, j] = M[i, j];

M2[i, j] = M[n / 2 + i, j];

}

alglib.svd.rmatrixsvd(M1, 3, 3, 1, 1, 2, ref W, ref U, ref VT);

for (i = 0; i < n / 2; i++)

for (j = 0; j < 3; j++)

{

M1[i, j] = M1[i, j] / W[0];

}

alglib.svd.rmatrixsvd(M2, 3, 3, 1, 1, 2, ref W, ref U, ref VT);

for (i = 0; i < n / 2; i++)

for (j = 0; j < 3; j++)

{

M2[i, j] = M2[i, j] / W[0];

}

for (i = 0; i < n / 2; i++)

{

M3[i, 0] = M1[i, 1] * M2[i, 2] - M1[i, 2] * M2[i, 1];

M3[i, 1] = M1[i, 2] * M2[i, 0] - M1[i, 0] * M2[i, 2];

M3[i, 2] = M1[i, 0] * M2[i, 1] - M1[i, 1] * M2[i, 0];

}

alglib.svd.rmatrixsvd(M3, 3, 3, 1, 1, 2, ref W, ref U, ref VT);

for (i = 0; i < n / 2; i++)

for (j = 0; j < 3; j++)

{

M3[i, j] = M3[i, j] / W[0];

}

//-------------vector

i1[0] = M[0, 0];

i1[1] = M[0, 1];

i1[2] = M[0, 2];

j1[0] = M[n / 2, 0];

j1[1] = M[n / 2, 1];

j1[2] = M[n / 2, 2];

sum = Math.Sqrt(i1[0] * i1[0] + i1[1] * i1[1] + i1[1] * i1[1]);

for (j = 0; j < 3; j++)

i1[j] = i1[j] / sum;

sum = 0;

sum = Math.Sqrt(j1[0] * i1[0] + j1[1] * j1[1] + j1[1] * j1[1]);

for (j = 0; j < 3; j++)

j1[j] = j1[j] / sum;

k1[0] = i1[1] * j1[2] - i1[2] * j1[1];

k1[1] = i1[2] * j1[0] - i1[0] * j1[2];

k1[2] = i1[0] * j1[1] - i1[1] * j1[0];

sum = 0;

sum = Math.Sqrt(k1[0] * k1[0] + k1[1] * k1[1] + k1[1] * k1[1]);

for (j = 0; j < 3; j++)

k1[j] = k1[j] / sum;

R0[0, 0] = i1[0];

R0[1, 0] = i1[1];

R0[2, 0] = i1[2];

R0[0, 1] = j1[0];

R0[1, 1] = j1[1];

R0[2, 1] = j1[2];

R0[0, 2] = k1[0];

R0[1, 2] = k1[1];

R0[2, 2] = k1[2];

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

for (j = 0; j < 3; j++)

{

ZWPROVr1[i, j] = 0;

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

ZWPROVr1[i, j] += (M[i, k] * R0[k, j]);

}

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

for (j = 0; j < 3; j++)

{

MK[i, j] = ZWPROVr1[i, j];

M[i, j] = ZWPROVr1[i, j];

}

alglib.matinv.rmatrixinverse(ref R0, 3, ref info, ref per);

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

for (j = 0; j < m; j++)

{

ZWPROVr1[i, j] = 0;

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

ZWPROVr1[i, j] += (R0[i, k] * S[k, j]);

}

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

for (j = 0; j < m; j++)

{

SK[i, j] = ZWPROVr1[i, j];

S[i, j] = ZWPROVr1[i, j];

}

richTextBox1.Text += Environment.NewLine;

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

for (j = 0; j < 3; j++)

{

if (j == 0)

richTextBox1.Text += Environment.NewLine;

// richTextBox1.Text = richTextBox1.Text + MK[i, j] + " ";

}

richTextBox1.Text += Environment.NewLine;

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

for (j = 0; j < m; j++)

{

if (j == 0)

richTextBox1.Text += Environment.NewLine;

// richTextBox1.Text = richTextBox1.Text + SK[i, j].ToString("N1") + " ";

}

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

for (j = 0; j < m; j++)

{

ZWPROVr1[i, j] = 0;

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

ZWPROVr1[i, j] += (MK[i, k] * SK[k, j]);

}

richTextBox1.Text += Environment.NewLine;

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

for (j = 0; j < 3; j++)

{

if (j == 0)

richTextBox1.Text += Environment.NewLine;

richTextBox1.Text = richTextBox1.Text + MK[i, j] + " ";

}

richTextBox1.Text += Environment.NewLine;

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

{

richTextBox1.Text += Environment.NewLine;

richTextBox1.Text = richTextBox1.Text +T[i]/m + " ";

}

*/

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

for (j = 0; j < m; j++)

{

ZWPROVr1[i, j] = 0;

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

ZWPROVr1[i, j] += (MK[i, k] * SK[k, j]);

}

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

for (j = 0; j < m; j++)

{

eps+=ZWPROVr1[i,j]-ZWsr1[i,j];

}

eps = eps / m;

richTextBox1.Text += Environment.NewLine;

richTextBox1.Text = richTextBox1.Text + eps + " XAXAXAXAXA ";

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

for (j = 0; j < m; j++)

{

SK[i, j] = S[i, j];

}

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

for (j = 0; j < 3; j++)

{

MK[i, j] = M[i, j];

}

ksi2=10;

gf = 1 / ksi2;

// gf = 1;

for (i = 0; i < n/2; i++)

{

MK[i, 0] *= Math.Sqrt(1 + (T[i] * T[i]) / (m * m*gf*gf)) / Math.Sqrt(MK[i, 0] * MK[i, 0] + MK[i, 1] * MK[i, 1] + MK[i, 2] * MK[i, 2]);

MK[i, 1] *= Math.Sqrt(1 + (T[i] * T[i]) / (m * m * gf * gf)) / Math.Sqrt(MK[i, 0] * MK[i, 0] + MK[i, 1] * MK[i, 1] + MK[i, 2] * MK[i, 2]);

MK[i, 2] *= Math.Sqrt(1 + (T[i] * T[i]) / (m * m * gf * gf)) / Math.Sqrt(MK[i, 0] * MK[i, 0] + MK[i, 1] * MK[i, 1] + MK[i, 2] * MK[i, 2]);

MK[i + n / 2, 0] *= Math.Sqrt(1 + (T[i] * T[i]) / (m * m * gf * gf)) / Math.Sqrt(MK[i + n / 2, 0] * MK[i + n / 2, 0] + MK[i + n / 2, 1] * MK[i + n / 2, 1] + MK[i + n / 2, 2] * MK[i + n / 2, 2]);

MK[i + n / 2, 1] *= Math.Sqrt(1 + (T[i] * T[i]) / (m * m * gf * gf)) / Math.Sqrt(MK[i + n / 2, 0] * MK[i + n / 2, 0] + MK[i + n / 2, 1] * MK[i + n / 2, 1] + MK[i + n / 2, 2] * MK[i + n / 2, 2]);

MK[i + n / 2, 2] *= Math.Sqrt(1 + (T[i] * T[i]) / (m * m * gf * gf)) / Math.Sqrt(MK[i + n / 2, 0] * MK[i + n / 2, 0] + MK[i + n / 2, 1] * MK[i + n / 2, 1] + MK[i + n / 2, 2] * MK[i + n / 2, 2]);

}

richTextBox1.Text += Environment.NewLine;

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

for (j = 0; j < 3; j++)

{

if (j == 0)

richTextBox1.Text += Environment.NewLine;

// richTextBox1.Text = richTextBox1.Text + MK[i, j] + " ";

}

for (i = 0; i < n/2; i++)

{

G[0, 0, i] = MK[i, 1] * MK[i + n / 2, 2] - MK[i, 2] * MK[i + n / 2, 1];

G[0, 1, i] = MK[i, 2] * MK[i + n / 2, 0] - MK[i, 0] * MK[i + n / 2, 2];

G[0, 2, i] = MK[i, 0] * MK[i + n / 2, 1] - MK[i, 1] * MK[i + n / 2, 0];

G[1, 0, i] = MK[i, 0];

G[1, 1, i] = MK[i, 1];

G[1, 2, i] = MK[i, 2];

G[2, 0, i] = MK[i+n/2, 0];

G[2, 1, i] = MK[i+n/2, 1];

G[2, 2, i] = MK[i + n / 2, 2];

}

for (i = 0; i < n / 2; i++)

{

H[0, i] = 1;

H[1, i] = -T[i]/(gf*m);

H[2, i] = -T[i+n/2]/(gf*m);

}

for (i = 0; i < n / 2; i++)

{

for (j = 0; j < 3; j++)

for (q = 0; q < 3; q++)

G1[j, q] = G[j, q, i];

alglib.matinv.rmatrixinverse(ref G1, 3, ref info, ref per);

for (j = 0; j < 3; j++)

{

Rez_K[j, i] = 0;

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

Rez_K[j, i] += (G1[j, k] * H[k, i]);

}

}

richTextBox1.Text += Environment.NewLine;

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

for (j = 0; j < n/2; j++)

{

if (j == 0)

richTextBox1.Text += Environment.NewLine;

// richTextBox1.Text = richTextBox1.Text + Rez_K[i, j] + " ";

}

for (i = 0; i < n / 2; i++)

{

Rez_J[0, i] = Rez_K[1, i] * MK[i, 2] - Rez_K[2, i] * MK[i, 1];

Rez_J[1, i] = Rez_K[2, i] * MK[i, 0] - Rez_K[0, i] * MK[i, 2];

Rez_J[2, i] = Rez_K[0, i] * MK[i, 1] - Rez_K[1, i] * MK[i, 0];

}

/*

for (i = 0; i < n / 2; i++)

{

alfa=Rez_J[0,0];

alfa1=Rez_J[1,0];

eps=Rez_J[2,0];

Rez_J[0, i] -=alfa ;

Rez_J[1, i] -= alfa1-1;

Rez_J[2, i] -=eps;

}

*/

richTextBox1.Text += Environment.NewLine;

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

for (j = 0; j < n / 2; j++)

{

if (j == 0)

richTextBox1.Text += Environment.NewLine;

// richTextBox1.Text = richTextBox1.Text + Rez_J[i, j] + " ";

}

for (i = 0; i < n / 2; i++)

{

Rez_I[0, i] = MK[i + n / 2, 1] * Rez_K[2, i] - MK[i + n / 2, 2] * Rez_K[1, i];

Rez_I[1, i] = MK[i + n / 2, 2] * Rez_K[0, i] - MK[i + n / 2, 0] * Rez_K[2, i];

Rez_I[2, i] = MK[i + n / 2, 0] * Rez_K[1, i] - MK[i + n / 2, 1] * Rez_K[0, i];

}

/* for (i = 0; i < n / 2; i++)

{

alfa = Rez_I[0, 0];

alfa1 = Rez_I[1, 0];

eps = Rez_I[2, 0];

Rez_I[0, i] -= alfa-1;

Rez_I[1, i] -= alfa1;

Rez_I[2, i] -= eps;

}

*/

richTextBox1.Text += Environment.NewLine;

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

for (j = 0; j < n / 2; j++)

{

if (j == 0)

richTextBox1.Text += Environment.NewLine;

// richTextBox1.Text = richTextBox1.Text + Rez_I[i, j] + " ";

}

//----------------------------------------------------------------27oct2010

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

{

Z[i] = Math.Sqrt(M[i, 0] * M[i, 0] + M[i, 1] * M[i, 1] + M[i, 2] * M[i, 2]) * Math.Sqrt(MK[i, 0] * M[i, 0] + M[i, 1] * M[i, 1] + M[i, 2] * M[i, 2]) / (1 + T[i] * T[i]/(m*m));

Z[i]=1/Math.Sqrt(Z[i]);

}

/*

for (i = 0; i < n / 2; i++)

{

Rez_T[0,i]=1+(Rez_J[0,i]-Rez_I[0,i]*Rez_J[2,i])*Rez_K[1,i]/((Rez_I[1,i]*Rez_J[2,i]-Rez_J[1,i])*Rez_K[0,i])-(Rez_J[0,i]*Rez_K[2,i])/(Rez_J[2,i]*Rez_K[0,i])-(Rez_J[0,i]-Rez_I[0,i]*Rez_J[2,i])*Rez_J[1,i]*Rez_K[2,i]/((Rez_I[1,i]*Rez_J[2,i]-Rez_J[1,i])*Rez_J[2,i]*Rez_K[0,i]);

Rez_T[0, i] = (T[i + n / 2] * Z[i] * Rez_K[2, i] / (Rez_J[2, i] * Rez_K[0, i]*m) + (((T[i + n / 2]/m )* Z[i] * Rez_J[1, i] - (T[i]/m) * Z[i] * Rez_J[2, i] * Rez_J[1, i]) * Rez_K[2, i] )/ ((Rez_I[1, i] * Rez_J[2, i] - Rez_J[1, i]) * Rez_J[2, i] * Rez_K[0, i]) - Z[i] / Rez_K[0, i] - (((T[i + n / 2]/m) * Z[i] - (T[i]/m) * Z[i] * Rez_J[2, i]) * Rez_K[1, i] )/ ((Rez_I[1, i] * Rez_J[2, i] - Rez_J[1, i]) * Rez_K[0, i]))/Rez_T[0, i] ;

Rez_T[1,i]=(Rez_T[0, i]*(Rez_J[0,i]-Rez_I[0,i]*Rez_J[2,i]))/(Rez_I[1,i]*Rez_J[2,i]-Rez_J[1,i])+((T[i + n / 2]/m) * Z[i] - (T[i]/m) * Z[i] * Rez_J[2, i])/(Rez_I[1,i]*Rez_J[2,i]-Rez_J[1,i]);

Rez_T[2,i]=T[i + n / 2] * Z[i]/(m*Rez_J[2,i])-Rez_J[0,i]*Rez_T[0,i]/Rez_J[2,i]-Rez_J[1,i]*Rez_T[1,i]/Rez_J[2,i];

}

*/

for (i = 0; i < n / 2; i++)

{

Q[0, 0] = Rez_K[0, i];

Q[0, 1] = Rez_K[1, i];

Q[0, 2] = Rez_K[2, i];

Q[1, 0] = Rez_I[0, i];

Q[1, 1] = Rez_I[1, i];

Q[1, 2] = Rez_I[2, i];

Q[2, 0] = Rez_J[0, i];

Q[2, 1] = Rez_J[1, i];

Q[2, 2] = Rez_J[2, i];

alglib.matinv.rmatrixinverse(ref Q, 3, ref info, ref per);

t1[0] = -Z[i];

t1[1] = (-T[i] * Z[i]) / m;

t1[1] = (-T[i+n/2] * Z[i] )/ m;

Rez_T[0, i] = t1[0] * Q[0, 0] + t1[0] * Q[1, 0] + t1[0] * Q[2, 0];

Rez_T[1, i] = t1[1] * Q[0, 1] + t1[1] * Q[1, 1] + t1[1] * Q[2, 1];

Rez_T[2, i] = t1[2] * Q[0, 2] + t1[2] * Q[1, 2] + t1[2] * Q[2, 2];

}

richTextBox1.Text += Environment.NewLine;

richTextBox1.Text = richTextBox1.Text +"TTTT ";

richTextBox1.Text += Environment.NewLine;

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

for (j = 0; j < n / 2; j++)

{

if (j == 0)

richTextBox1.Text += Environment.NewLine;

// richTextBox1.Text = richTextBox1.Text + Rez_T[i, j].ToString("N4") + " ; ";

}

richTextBox1.Text += Environment.NewLine;

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

{

richTextBox1.Text += Environment.NewLine;

richTextBox1.Text = richTextBox1.Text + Z[i] + " z ";

}

richTextBox1.Text += Environment.NewLine;

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

for (j = 0; j < n / 2; j++)

{

if (j == 0)

richTextBox1.Text += Environment.NewLine;

// richTextBox1.Text = richTextBox1.Text + Rez_T[i, j] + " ";

}

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

Dli[i] = Math.Sqrt(S[0,i]*S[0,i]+S[1,i]*S[1,i]+S[2,i]*S[2,i]);

richTextBox1.Text += Environment.NewLine;

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

{

richTextBox1.Text += Environment.NewLine;

// richTextBox1.Text = richTextBox1.Text + Dli[i] + " dlina ";

}

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

Dli2[i] = Math.Sqrt((S[0, i]-Rez_T[0,0]) * (S[0, i]-Rez_T[0,0]) + (S[1, i]-Rez_T[1,0]) * (S[1, i]-Rez_T[1,0]) + (S[2, i]-Rez_T[2,0]) * (S[2, i]-Rez_T[2,0]));

richTextBox1.Text += Environment.NewLine;

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

{

richTextBox1.Text += Environment.NewLine;

// richTextBox1.Text = richTextBox1.Text + Dli2[i] + " dlina ";

}

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

{

if (S[0, i] < S_xmin) S_xmin = S[0, i];

if (S[0, i] > S_xmax) S_xmax = S[0, i];

if (S[1, i] < S_ymin) S_ymin = S[1, i];

if (S[1, i] > S_ymax) S_ymax = S[1, i];

if (S[2, i] < S_zmin) S_zmin = S[2, i];

if (S[2, i] > S_zmax) S_zmax = S[2, i];

}

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

{

Visoti[i] = S[2, i] - S_zmin;

}

richTextBox1.Text += Environment.NewLine;

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

{

richTextBox1.Text += Environment.NewLine;

richTextBox1.Text = richTextBox1.Text + Visoti[i] + " visota ";

}

richTextBox1.Text += Environment.NewLine;

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

{

richTextBox1.Text += Environment.NewLine;

richTextBox1.Text = richTextBox1.Text + S[0,i].ToString("N4")+" "+S[1,i].ToString("N4")+" "+S[2,i].ToString("N4");

}

// FileStream fwr = new FileStream("D:\\3dscene.txt", FileMode.OpenOrCreate, FileAccess.Read);

FileStream fwr = File.OpenWrite("D:\\3dscene.txt");

StreamWriter sr1 = new StreamWriter(fwr);

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

sr1.WriteLine(S[0, i].ToString("N4") + " " + S[1, i].ToString("N4") + " " + S[2, i].ToString("N4"));

Draw();

}

private void richTextBox1_TextChanged(object sender, EventArgs e)

{

}

private void Form1_Load(object sender, EventArgs e)

{

// инициализация Glut

Glut.glutInit();

Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH);

// очитка окна

Gl.glClearColor(255, 255, 255, 1);

// установка порта вывода в соотвествии с размерами элемента anT

Gl.glViewport(0, 0, AnT.Width, AnT.Height);

// настройка проекции

Gl.glMatrixMode(Gl.GL_PROJECTION);

Gl.glLoadIdentity();

Glu.gluPerspective(90, (float)AnT.Width / (float)AnT.Height, 0.1, 200);

Gl.glMatrixMode(Gl.GL_MODELVIEW);

Gl.glLoadIdentity();

// настройка параметров OpenGL для визуализации

Gl.glEnable(Gl.GL_DEPTH_TEST);

// Gl.glEnable(Gl.GL_LIGHTING);

// Gl.glEnable(Gl.GL_LIGHT0);

}

private void button2_Click(object sender, EventArgs e)

{

Application.Exit();

}

private void button3_Click(object sender, EventArgs e)

{

}

private void timer1_Tick(object sender, EventArgs e)

{

Draw();

}

private void Draw()

{

double os_x, os_y, os_z;

int i, m = 20;

os_x = 1;

os_y = 0;

os_z = 0;

switch (comboBox1.SelectedIndex)

{

// устанавливаем необходимую ось (будет испльзовано в функции glRotate**)

case 0:

{

os_x = 1;

os_y = 0;

os_z = 0;

break;

}

case 1:

{

os_x = 0;

os_y = 1;

os_z = 0;

break;

}

case 2:

{

os_x = 0;

os_y = 0;

os_z = 1;

break;

}

}

timer1.Start();

Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);

Gl.glLoadIdentity();

//Gl.glColor3f(0,0, 60.5f);

Gl.glColor3b(0, 100, 0);

Gl.glPushMatrix();

// производим перемещение, в зависимости от значений, полученных при перемещении ползунков

Gl.glTranslated((double)trackBar1.Value / 1000, (double)trackBar2.Value / 1000, (double)trackBar3.Value / 1000);

// поворот по установленной оси

Gl.glRotated((double)trackBar4.Value, 1, 0, 0);

Gl.glRotated((double)trackBar5.Value, 0, 1, 0);

Gl.glRotated((double)trackBar6.Value, 0, 0, 1);

// и масштабирование объекта

//Gl.glScaled(0.1, 0.1, 0.1);

S_xmin = S[0, 0];

S_xmax = S[0, 0];

S_ymin = S[1, 0];

S_ymax = S[1, 0];

S_zmin = S[2, 0];

S_zmax = S[2, 0];

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

{

if (S[0, i] < S_xmin) S_xmin = S[0, i];

if (S[0, i] > S_xmax) S_xmax = S[0, i];

if (S[1, i] < S_ymin) S_ymin = S[1, i];

if (S[1, i] > S_ymax) S_ymax = S[1, i];

if (S[2, i] < S_zmin) S_zmin = S[2, i];

if (S[2, i] > S_zmax) S_zmax = S[2, i];

}

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

{

S[2, i] = S[2,i]-S_zmin;

}

// Gl.glTranslated(0, 0, -100);

textBox1.Text = trackBar7.Value.ToString();

for (i = 0; i < trackBar7.Value; i++)

{

// Gl.glTranslated((S[0, i] - S_xmin) / Math.Abs(S_xmax - S_xmin), (S[1, i] - S_ymin) / Math.Abs(S_ymax - S_ymin), (S[2, i] - S_zmin) / Math.Abs(S_zmax - S_zmin));

Gl.glTranslated(S[0, i], S[1, i], S[2, i]);

// Gl.glTranslated(0, 10, -70);

// Gl.glRotated(0, 0, 0, 0);

//Gl.glScaled(0.2, 0.2, 0.2);

// рисуем сферу с помощью библиотеки FreeGLUT

Gl.glColor3b(100, 10, 10);//кругляшки

Glut.glutWireSphere(0.25, 30, 30);

Gl.glTranslated(0, 0, -S[2, i]);

Gl.glColor3b(0, 0, 0);//палочки

Glut.glutWireCylinder(0.05, S[2, i], 30, 30);

Gl.glTranslated(-S[0, i], -S[1, i], 0);

// Gl.glTranslated(-((S[0, i] - S_xmin) / Math.Abs(S_xmax - S_xmin)), -((S[1, i] - S_ymin) / Math.Abs(S_ymax - S_ymin)), -((S[2, i] - S_zmin) / Math.Abs(S_zmax - S_zmin)));

}

Gl.glColor3b(80, 120, 0);//земля

Glut.glutWireCone(70, 0.0001, 999, 999);

Gl.glPopMatrix();

Gl.glFlush();

AnT.Invalidate();

...

Подобные документы

  • Обоснование необходимости разработки программного комплекса. Обзор методов восстановления трёхмерных сцен. Общая структура алгоритма восстановления 3D сцен и сравнительный анализ его методов. Сравнительный анализ приближений и оценка его результатов.

    дипломная работа [2,6 M], добавлен 10.01.2013

  • Составление методического пособия пользователя для восстановления утраченной информации своими силами. Способы простого автоматического восстановления с помощью специализированных утилит и ручное восстановление памяти при помощи использования редакторов.

    дипломная работа [7,0 M], добавлен 27.04.2010

  • Анализ некоторых причин повреждения баз данных. Основные возможности восстановления баз данных на примере SQL Server 2005. Специфика этапа подготовки к восстановлению и его проведение. Общая характеристика специальных ситуаций восстановления информации.

    курсовая работа [40,3 K], добавлен 11.11.2010

  • Характеристика процесса восстановления максимального объёма удалённых файлов с физически исправных жестких дисков и флеш-накопителей. Исследование особенностей программ для восстановления данных после вирусных атак, сбоев питания и программных ошибок.

    курсовая работа [6,2 M], добавлен 31.03.2012

  • Программный способ восстановления данных без физического вмешательства в устройство накопителя, а также в функционирование микропрограммы и структуру модулей служебной информации. Восстановление структуры файловой системы или ее удаленных данных.

    презентация [67,5 K], добавлен 20.11.2016

  • Описание области применения операционной системы (ОС) Windows 7, ее основные характеристики и причины для сбоев в работе. Выбор программного обеспечения и алгоритма для диагностики и восстановления ОС. Расчет экономических затрат на реализацию проекта.

    дипломная работа [2,3 M], добавлен 10.04.2017

  • Создание программного приложения для искажения графической информации в цифровом изображении и последующего ее восстановления. Декартово произведение множеств. Передача ключа шифрования. Генерация псевдослучайных чисел. Умножение, транспонирование матриц.

    курсовая работа [1,7 M], добавлен 07.09.2016

  • Анализ работ по моделированию функциональных требований к проектируемой системе. Обзор эргономической организации рабочего места и интерфейса системы. Изучение методов резервного копирования и восстановления данных, средств защиты информации от угроз.

    дипломная работа [5,7 M], добавлен 22.09.2011

  • Способы восстановления операционной системы Windows, их достоинства и недостатки. Восстановление ОС при загрузке, при помощи Консоли Восстановления (Recovery Console), с помощью диска Windows XP и Acronis True Image. Проверка целостности системных файлов.

    презентация [337,5 K], добавлен 20.06.2014

  • Резервное копирование - возможность гарантированного восстановления в случае утери данных. Регулярное резервное копирование содержимого жестких дисков компьютеров. Процессы архивации и восстановления файлов. Архивация данных о состоянии системы.

    реферат [24,6 K], добавлен 18.07.2009

  • Основные методы резервного копирования и восстановления OC Windows 8. История файлов, создание точки восстановления. Выбор средств резервного копирования. Возможности программ для резервного копирования. Особенности моделирования и реализации задачи.

    курсовая работа [1,1 M], добавлен 24.12.2014

  • Особенности и параметры процесса защиты информации. Оценка полноты и достоверности информации. Методы восстановления пропусков в массивах данных с использованием регрессионного моделирования. Методы структурирования данных в условиях неопределенности.

    курсовая работа [89,1 K], добавлен 13.07.2011

  • Характеристика реляционной, иерархической и сетевой моделей баз данных. Анализ методов проектирования (декомпозиция, синтез, объектная связь), организации, обновления, восстановления, ограничений, поддержания целостности данных на примере СУБД Ms Access.

    дипломная работа [347,4 K], добавлен 13.02.2010

  • Основные компоненты среды Delphi, используемые в программе для сжатия и восстановления файлов. Код программы, разбивка массива на промежутки. Проверка определенных элементов кодовых слов. Поиск кодовых слов в остатке. Результаты тестирования приложения.

    курсовая работа [94,1 K], добавлен 19.12.2010

  • Составляющие цифровой модели рельефа. Назначение и области применения программного комплекса Credo_Топоплан, обзор основных функций системы. Создание ЦМР по тахеометрической съемке местности и с помощью растровой подложки; работа в Credo_Transform.

    курсовая работа [7,3 M], добавлен 19.04.2012

  • Этапы разработки системы реального времени для распознавания лиц на статическом изображении в условиях сложных сцен. Основные понятия алгоритма AdaBoost. Использование примитивов Хаара для описания свойств изображений. Среда разработки "Borland Delphi".

    курсовая работа [6,8 M], добавлен 06.01.2011

  • Причины "исчезновения" информации с жестких дисков и карт памяти. Принцип работы и обзор программ восстановления данных, восстановление данных с поцарапанных CD и DVD. Архивирование важных данных как лучший метод предупреждения потери информации.

    курсовая работа [2,2 M], добавлен 27.12.2010

  • Определение последовательности восстановления данных. Просмотр содержимого устройства резервного копирования средствами Enterprise Manager. Восстановление БД при повреждении диска. Команды Transact-SQL. Восстановление БД на другом экземпляре SQL Server.

    презентация [83,2 K], добавлен 10.11.2013

  • Факторизация натурального числа. Метод квадратичного решета. Факторизация с помощью эллиптических кривых. Реализация алгоритмов натуральных чисел и оценка их эффективности. Применение алгоритмов факторизации натуральных чисел в программной среде Maple.

    курсовая работа [851,6 K], добавлен 25.06.2013

  • Цели восстановления данных. Обеспечение отказоустойчивости, предупреждение неисправностей в работе. Параметры, необходимые для планирования сроков восстановительных работ. Создание устройства резервного копирования баз данных с помощью Transact-SQL.

    презентация [247,6 K], добавлен 10.11.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.