С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
sergey1988
2 / 2 / 1
Регистрация: 02.12.2011
Сообщений: 56
1

Где ошибка, добавляются одни и те же значения в List

23.05.2013, 18:28. Просмотров 339. Ответов 4
Метки нет (Все метки)

Смысл программы такой сначала она вычисляет начальные восемь точек, а потом вычисляет еще 8 раз эти же точки но с измененным положением в пространстве. Проблема в том что она выдает все 9 экземпляров точек, но точки внутри них одинаковые. Замучился искать где ошибка, помогите пожалуйста.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
 private List<OilPatch> EqualOilPatch(int x, int y, double w, double dst , double _hv)
        {
            OilPatch exemplar1 = new OilPatch();
 
            _Dst = dst / 9; 
 
            if (_hv <= 1)
            {
                _S1 = w / 0.0006; 
                double temp = _S1 / Math.PI;
                _R = Math.Pow(temp, 0.5); 
                _Spr = w / 0.0001; 
                _Vras = 0.04; 
            }
            else if (_hv > 1) 
            {
                _S1 = w / 0.01;
                double temp = _S1 / Math.PI;
                _R = Math.Pow(temp, 0.5);
                _Spr = _S1;
                _Vras = 0.0;
            }
 
            // расчитываем исходные координаты точек нефтяного пятна
            exemplar1.X1 = x;
            exemplar1.X2 = (int)(x + 0.707 * _R);
            exemplar1.X3 = (int)(x + _R);
            exemplar1.X4 = (int)(x + 0.707 * _R);
            exemplar1.X5 = x;
            exemplar1.X6 = (int)(x - 0.707 * _R);
            exemplar1.X7 = (int)(x - _R);
            exemplar1.X8 = (int)(x - 0.707 * _R);
 
            exemplar1.Y1 = (int)(y + _R);
            exemplar1.Y2 = (int)(y + 0.707 * _R);
            exemplar1.Y3 = y;
            exemplar1.Y4 = (int)(y - 0.707 * _R);
            exemplar1.Y5 = (int)(y - _R);
            exemplar1.Y6 = (int)(y - 0.707 * _R);
            exemplar1.Y7 = y;
            exemplar1.Y8 = (int)(y + 0.707 * _R);
            int i = 2;
            
            // добавляем первое пятно в контейнер
            patchContainer.Add(exemplar1);
 
            for (_Dst = dst / 9; _Dst < dst; _Dst = _Dst + (dst / 9))
            {
                OilPatch exemplar2 = new OilPatch();
 
                _v1 = V[MetrXToPixel(exemplar1.X1), MetrYToPixel(exemplar1.Y1)] + _Vras;
                _v2 = V[MetrXToPixel(exemplar1.X2), MetrYToPixel(exemplar1.Y2)] + 0.707 * _Vras;
                _v3 = V[MetrXToPixel(exemplar1.X3), MetrYToPixel(exemplar1.Y3)];
                _v4 = V[MetrXToPixel(exemplar1.X4), MetrYToPixel(exemplar1.Y4)] - _Vras * 0.707;
                _v5 = V[MetrXToPixel(exemplar1.X5), MetrYToPixel(exemplar1.Y5)] - _Vras;
                _v6 = V[MetrXToPixel(exemplar1.X6), MetrYToPixel(exemplar1.Y6)] - _Vras * 0.707;
                _v7 = V[MetrXToPixel(exemplar1.X7), MetrYToPixel(exemplar1.Y7)];
                _v8 = V[MetrXToPixel(exemplar1.X8), MetrYToPixel(exemplar1.Y8)] + _Vras * 0.707;
 
                _u1 = U[MetrXToPixel(exemplar1.X1), MetrYToPixel(exemplar1.Y1)];
                _u2 = U[MetrXToPixel(exemplar1.X2), MetrYToPixel(exemplar1.Y2)] + 0.707 * _Vras;
                _u3 = U[MetrXToPixel(exemplar1.X3), MetrYToPixel(exemplar1.Y3)] + _Vras;
                _u4 = U[MetrXToPixel(exemplar1.X4), MetrYToPixel(exemplar1.Y4)] + _Vras * 0.707;
                _u5 = U[MetrXToPixel(exemplar1.X5), MetrYToPixel(exemplar1.Y5)];
                _u6 = U[MetrXToPixel(exemplar1.X6), MetrYToPixel(exemplar1.Y6)] - _Vras * 0.707;
                _u7 = U[MetrXToPixel(exemplar1.X7), MetrYToPixel(exemplar1.Y7)] - _Vras;
                _u8 = U[MetrXToPixel(exemplar1.X8), MetrYToPixel(exemplar1.Y8)] - _Vras * 0.707;
 
                exemplar2.X1 = (int)(exemplar1.X1 + _Dst * _u1);
                exemplar2.X2 = (int)(exemplar1.X2 + _Dst * _u2);
                exemplar2.X3 = (int)(exemplar1.X3 + _Dst * _u3);
                exemplar2.X4 = (int)(exemplar1.X4 + _Dst * _u4);
                exemplar2.X5 = (int)(exemplar1.X5 + _Dst * _u5);
                exemplar2.X6 = (int)(exemplar1.X6 + _Dst * _u6);
                exemplar2.X7 = (int)(exemplar1.X7 + _Dst * _u7);
                exemplar2.X8 = (int)(exemplar1.X8 + _Dst * _u8);
 
                exemplar2.Y1 = (int)(exemplar1.Y1 + _Dst * _v1);
                exemplar2.Y2 = (int)(exemplar1.Y2 + _Dst * _v2);
                exemplar2.Y3 = (int)(exemplar1.Y3 + _Dst * _v3);
                exemplar2.Y4 = (int)(exemplar1.Y4 + _Dst * _v4);
                exemplar2.Y5 = (int)(exemplar1.Y5 + _Dst * _v5);
                exemplar2.Y6 = (int)(exemplar1.Y6 + _Dst * _v6);
                exemplar2.Y7 = (int)(exemplar1.Y7 + _Dst * _v7);
                exemplar2.Y8 = (int)(exemplar1.Y8 + _Dst * _v8);
 
                exemplar1.Sp = 0.5 * (exemplar1.Y1 * (exemplar1.X1 - exemplar1.X2) + exemplar1.Y2 * (exemplar1.X1 - exemplar1.X3) +
                    exemplar1.Y3 * (exemplar1.X2 - exemplar1.X4) + exemplar1.Y4 * (exemplar1.X3 - exemplar1.X5) +
                    exemplar1.Y5 * (exemplar1.X4 - exemplar1.X6) + exemplar1.Y6 * (exemplar1.X5 - exemplar1.X7) +
                    exemplar1.Y7 * (exemplar1.X6 - exemplar1.X8));
 
                if (exemplar1.Sp > _Spr)
                {
                    _Vras = 0.0;
                }
 
                patchContainer.Add(exemplar2);
            }
            return patchContainer;
        }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2013, 18:28
Ответы с готовыми решениями:

Ошибка трансляции List<List<string>> в DataGridView
Нужно вот такой список List&lt;List&lt;string&gt;&gt; отобразить в DataGridView Вот моя реализация. ...

Ошибка. не получается устранить(list = List<byte>)
Вот накатал, но есть ошибки, никак не получается устранить(list = List&lt;byte&gt;): for (int j = 0; j &lt;...

Массив: Выводит одни нули, не могу понять, где ошибка
public class Massiv { public static void main(String args) { int x = new int ; for(int...

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

Выводяться одни и те же значения
Код записывает значения в обьект (это работает в цикле), puts - выводит разные значения. ...

4
kodv
1420 / 1094 / 344
Регистрация: 11.04.2011
Сообщений: 2,606
Завершенные тесты: 1
23.05.2013, 18:34 2
Цитата Сообщение от sergey1988 Посмотреть сообщение
Проблема в том что она выдает все 9 экземпляров точек, но точки внутри них одинаковые
А что должно выдаваться то? Один раз вы добавляете в список новый элемент после создания экземпляра 1, потому 8 раз создаете и расчитываете координаты экземпляра 2, который потом вставляете в список. Итого в списке получается 9 экземпляров.
0
sergey1988
2 / 2 / 1
Регистрация: 02.12.2011
Сообщений: 56
23.05.2013, 18:42  [ТС] 3
тогда подскажите пожалуйста как расчитать следующие экземпляры беря за основу данные из предидущего экземпляра.пожалуйста

Добавлено через 6 минут
все спасибо разабрался
0
kodv
1420 / 1094 / 344
Регистрация: 11.04.2011
Сообщений: 2,606
Завершенные тесты: 1
23.05.2013, 18:42 4
Все равно до конца не понимаю, что вы хотите сделать. Предположу, что вы имели ввиду примерно это:
C#
1
2
exemplar1.X1 += _Dst * _u1;
// И по аналогии для всех свойств объекта exemplar1
0
sergey1988
2 / 2 / 1
Регистрация: 02.12.2011
Сообщений: 56
23.05.2013, 20:04  [ТС] 5
да там надо последующие точки расчитывать исходя из положения предидущих, я просто затупил, надо было просто обращатся к последнему эллементу списка, все разоьрался спасибо

Добавлено через 1 час 9 минут
и все равно не получилось беру последний эллемент List, в цикле создаю новый эллемент вычисляю его добовляю в List , a он все равно равен предыдущему в чем проблема? помогите пожалуйста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
 private List<OilPatch> EqualOilPatch(int x, int y, double w, double dst, double _hv)
        {
            OilPatch exemplar1 = new OilPatch();
 
            _Dst = dst / 9; // определяем шаг расчета по времени
 
            if (_hv <= 1) // если высота волны меньше 1м то
            {
                _S1 = w / 0.0006; // площадь пятна
                double temp = _S1 / Math.PI;
                _R = Math.Pow(temp, 0.5); // радиус пятна
                _Spr = w / 0.0001; // площадь растекания
                _Vras = 0.04; // скорость растекания
            }
            else if (_hv > 1) // если высота волны больше 1м
            {
                _S1 = w / 0.01;
                double temp = _S1 / Math.PI;
                _R = Math.Pow(temp, 0.5);
                _Spr = _S1;
                _Vras = 0.0;
            }
 
            // расчитываем исходные координаты точек нефтяного пятна
            exemplar1.X1 = x;
            exemplar1.X2 = (int)(x + 0.707 * _R);
            exemplar1.X3 = (int)(x + _R);
            exemplar1.X4 = (int)(x + 0.707 * _R);
            exemplar1.X5 = x;
            exemplar1.X6 = (int)(x - 0.707 * _R);
            exemplar1.X7 = (int)(x - _R);
            exemplar1.X8 = (int)(x - 0.707 * _R);
 
            exemplar1.Y1 = (int)(y + _R);
            exemplar1.Y2 = (int)(y + 0.707 * _R);
            exemplar1.Y3 = y;
            exemplar1.Y4 = (int)(y - 0.707 * _R);
            exemplar1.Y5 = (int)(y - _R);
            exemplar1.Y6 = (int)(y - 0.707 * _R);
            exemplar1.Y7 = y;
            exemplar1.Y8 = (int)(y + 0.707 * _R);
            
 
            // добавляем первое пятно в контейнер
            patchContainer.Add(exemplar1);
 
            for (_Dst = dst / 9; _Dst < dst; _Dst = _Dst + (dst / 9))
            {
                OilPatch newExemplar = new OilPatch();
                OilPatch exemplar11 = patchContainer.Last();
 
                _v1 = V[MetrXToPixel(exemplar11.X1), MetrYToPixel(exemplar11.Y1)] + _Vras;
                _v2 = V[MetrXToPixel(exemplar11.X2), MetrYToPixel(exemplar11.Y2)] + 0.707 * _Vras;
                _v3 = V[MetrXToPixel(exemplar11.X3), MetrYToPixel(exemplar11.Y3)];
                _v4 = V[MetrXToPixel(exemplar11.X4), MetrYToPixel(exemplar11.Y4)] - _Vras * 0.707;
                _v5 = V[MetrXToPixel(exemplar11.X5), MetrYToPixel(exemplar11.Y5)] - _Vras;
                _v6 = V[MetrXToPixel(exemplar11.X6), MetrYToPixel(exemplar11.Y6)] - _Vras * 0.707;
                _v7 = V[MetrXToPixel(exemplar11.X7), MetrYToPixel(exemplar11.Y7)];
                _v8 = V[MetrXToPixel(exemplar11.X8), MetrYToPixel(exemplar11.Y8)] + _Vras * 0.707;
 
                _u1 = U[MetrXToPixel(exemplar11.X1), MetrYToPixel(exemplar11.Y1)];
                _u2 = U[MetrXToPixel(exemplar11.X2), MetrYToPixel(exemplar11.Y2)] + 0.707 * _Vras;
                _u3 = U[MetrXToPixel(exemplar11.X3), MetrYToPixel(exemplar11.Y3)] + _Vras;
                _u4 = U[MetrXToPixel(exemplar11.X4), MetrYToPixel(exemplar11.Y4)] + _Vras * 0.707;
                _u5 = U[MetrXToPixel(exemplar11.X5), MetrYToPixel(exemplar11.Y5)];
                _u6 = U[MetrXToPixel(exemplar11.X6), MetrYToPixel(exemplar11.Y6)] - _Vras * 0.707;
                _u7 = U[MetrXToPixel(exemplar11.X7), MetrYToPixel(exemplar11.Y7)] - _Vras;
                _u8 = U[MetrXToPixel(exemplar11.X8), MetrYToPixel(exemplar11.Y8)] - _Vras * 0.707;
 
                newExemplar.X1 = (int)(exemplar11.X1 + _Dst * _u1);
                newExemplar.X2 = (int)(exemplar11.X2 + _Dst * _u2);
                newExemplar.X3 = (int)(exemplar11.X3 + _Dst * _u3);
                newExemplar.X4 = (int)(exemplar11.X4 + _Dst * _u4);
                newExemplar.X5 = (int)(exemplar11.X5 + _Dst * _u5);
                newExemplar.X6 = (int)(exemplar11.X6 + _Dst * _u6);
                newExemplar.X7 = (int)(exemplar11.X7 + _Dst * _u7);
                newExemplar.X8 = (int)(exemplar11.X8 + _Dst * _u8);
 
                newExemplar.Y1 = (int)(exemplar11.Y1 + _Dst * _v1);
                newExemplar.Y2 = (int)(exemplar11.Y2 + _Dst * _v2);
                newExemplar.Y3 = (int)(exemplar11.Y3 + _Dst * _v3);
                newExemplar.Y4 = (int)(exemplar11.Y4 + _Dst * _v4);
                newExemplar.Y5 = (int)(exemplar11.Y5 + _Dst * _v5);
                newExemplar.Y6 = (int)(exemplar11.Y6 + _Dst * _v6);
                newExemplar.Y7 = (int)(exemplar11.Y7 + _Dst * _v7);
                newExemplar.Y8 = (int)(exemplar11.Y8 + _Dst * _v8);
 
                newExemplar.Sp = 0.5 * (newExemplar.Y1 * (newExemplar.X1 - newExemplar.X2) + newExemplar.Y2 * (newExemplar.X1 - newExemplar.X3) +
                   newExemplar.Y3 * (newExemplar.X2 - newExemplar.X4) + newExemplar.Y4 * (newExemplar.X3 - newExemplar.X5) +
                    newExemplar.Y5 * (newExemplar.X4 - newExemplar.X6) + newExemplar.Y6 * (newExemplar.X5 - newExemplar.X7) +
                   newExemplar.Y7 * (newExemplar.X6 - newExemplar.X8));
 
                if (exemplar1.Sp > _Spr)
                {
                    _Vras = 0.0;
                }
 
                patchContainer.Add(newExemplar);
 
            }
            return patchContainer;
        }
Добавлено через 10 минут
вот алгоритм:
Алгоритм расчета следующий (рис. 1):
1. По заданным координатам центра разлива Хо, Yо, объему разлива W и заданном
времени шторма DT, определяются:
- шаг расчета повремени Dst = DT/9 (то есть время шторма делится на 9 временных
интервалов);
- при hв <= 1.0 м, S1 = W / Тплис1 = W / 0.0006, R = (S1/π)
0.5
,
Sпред = W / Тплmin1 = W / 0.0001, Vрас = 0.04 м/с;
- при hв > 1.0 м, S1 = W / Тплmin2 = W / 0.01, R = (S1/π)
0.5, Sпред = S1,
Vрас = 0.0 м/с;
- рассчитываются исходные координаты 8 точек, аппроксимирующих исходное пятно
разлива на шаге расчета 1:
Х1,1 = Хо, Y1,1 = Yo + R;
Х1,2 = Хо + R×0.707, Y1,2 = Yo + R×0.707;
Х1,3 = Хо + R, Y1,3 = Yo;
Х1,4 = Хо + R×0.707, Y1,4 = Yo - R×0.707;
Х1,5 = Хо, Y1,5 = Yo - R; Х1,6 = Хо - R×0.707, Y1,6 = Yo - R×0.707;
Х1,7 = Хо - R, Y1,7 = Yo; Х1,8 = Хо - R×0.707, Y1,8 = Yo + R×0.707,
до этого момента все хорошо считает а вот дальше:

2. По методике [2, 3] рассчитываются компоненты скорости течения в точках 1 – 8 на
шаге расчета i:
Ui,1 = Uтi,1, Vi,1 = Vтi,1 + Vрас;
Ui,2 = Uтi,2 + Vрас ×0.707, Vi,2 = Vтi,2 + Vрас ×0.707;
Ui,3 = Uтi,3 + Vрас, Vi,3 = Vтi,3;
Ui,4 = Uтi,4 + Vрас ×0.707, Vi,4 = Vтi,4 - Vрас ×0.707;
Ui,5 = Uтi,5, Vi,5 = Vтi,5 - Vрас;
Ui,6 = Uтi,6 - Vрас ×0.707, Vi,6 = Vтi,6 - Vрас ×0.707;
Ui,7 = Uтi,7 - Vрас, Vi,7 = Vтi,7;

Ui,8 = Uтi,8 - Vрас ×0.707, Vi,8 = Vтi,8 + Vрас ×0.707,
где Uтi,1….Uтi,8, Vтi,1 …Vтi,8 – компоненты скорости сносящего течения в точках
аппроксимации пятна разлива.
3. Рассчитываются новые координаты точек аппроксимации пятна разлива на шаге
расчета i+1 для точек j = 1…8:
Хi+1,j = Хi,j + Кклх Dst × Ui,j; Yi+1,j = Yi,j + Кклy Dst × Vi,j.
где Кклх, Кклy – калибровочные коэффициенты, определяемые по натурным или
экспериментальным данным. При отсутствии таких данных значения указанных
коэффициентов принимаются равными 1.
4. Рассчитывается новая площадь пятна разлива
Si+1 = 0.5 × ) (
1 1
1
+ − − ∑ i i
n
i X X Y , где n = 1…8 – количество точек аппроксимации
пятна разлива. Если Si+1 >= Sпред, то принимается Vрас = 0.
5. Если шаг по времени i <= 9, то производится переход к пункту 2.

вот в пункте 3 координаты получаются такими же как в пункте 1. а они должны изменятся. помогите кто чем может пожалуйста
0
23.05.2013, 20:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2013, 20:04

Перенести значения из одного List<T> в другой List
Добрый вечер, возможно глупы вопрос, но он привел меня в замешательство. Как копировать значения...

Rnd() выдает одни и те же значения
connection.Open(); OleDbCommand random = new OleDbCommand(&quot;SELECT TOP 5 `FIO`...

Random: генерируются одни и те же значения
Написала программу, в которой нужно использовать генерацию случайных чисел, в итоге при каждом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru