Восстановление рельефа местности по серии изображений методом факторизации матриц
Необходимость разработки программного комплекса. Обзор методов восстановления трёхмерных сцен: алгоритмы 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