Форум Игромании
 
Регистрация
Справка

Программирование Создание, разработка и доработка различных игр и программного обеспечения

Ответ
 
Опции темы
Старый 31.12.2011, 18:57   #81
Опытный игрок
 
Аватар для OverDoser
 
Регистрация: 08.09.2006
Адрес: столица России - Москва
Сообщений: 1,406
Репутация: 130 [+/-]
Тема:маркировка бинарного изображения(массива из 0 и 1)
Использовал рекурсивный алгоритм.Программа вылетает и ругается на переполнение стека. Помогите найти решение проблемы:
Скрытый текст:
Цитата:
class Search
{
//Метод получения координат соседних пикселей
public int[,] neighbors(int l, int p)
{
int[,] nset1 = new int[2, 8];//РУГАЕТСЯ НА ОШИБКУ ЗДЕСЬ
nset1[0, 0] = l - 1; nset1[0, 1] = l - 1; nset1[0, 2] = l - 1;
nset1[0, 3] = l; nset1[0, 4] = l; nset1[0, 5] = l + 1;
nset1[0, 6] = l + 1; nset1[0, 7] = l + 1;
nset1[1, 0] = p - 1; nset1[1, 1] = p; nset1[1, 2] = p + 1;
nset1[1, 3] = p - 1; nset1[1, 4] = p + 1;
nset1[1, 5] = p - 1; nset1[1, 6] = p; nset1[1, 7] = p + 1;
return nset1;
}
//Собственно, сам метод поиска связанных пикселей и присваивание им индекса kk.l и p-
//координаты первого пикселя, получившего индекс kk
public int[,] search(int[,] y, int kk, int l, int p)
{
y[l, p] = kk; Search ko = new Search();
int[,] nset = new int[2, 8];
//Координаты соседей
nset = ko.neighbors(l, p);
for (int qq = 0; qq < 8; qq++)

{ if (y[nset[0, qq], nset[1, qq]] == -1)
{//рекурсия
search(y, kk, nset[0, qq], nset[1, qq]); } }

return y;
}
/*Здесь идет получение самого массива из 0 и 1,
единицы меняем на -1, дабы избежать путаницы с индексом 1*/
int k=0;
for (int i=1;i<=300;i++)
for(int z=1;z<=300;z++)
{if (op[i,z]==-1){k++;op=dlo.search(op,k,i,z);}}]



Можно как-нибудь увеличить размер самого стека?Пишу в Visual Studio 2010

Последний раз редактировалось OverDoser; 31.12.2011 в 19:54.
OverDoser вне форума  
Отправить сообщение для OverDoser с помощью ICQ Ответить с цитированием
Старый 20.07.2012, 22:03   #82
Игроман
 
Аватар для Hast


 
Регистрация: 13.07.2007
Адрес: Сімферополь
Сообщений: 3,012
Репутация: 629 [+/-]
Играюсь тут с разработкой под Windows Phone, пытаюсь сделать простенький клиент для API вконтакта. Суть в том, что при первичной авторизации клиент получает токен, который далее необходимо отправлять с каждым новым запросом к API. Так вот, где и как лучше хранить этот токен, дабы он не терялся после перезапуска приложения?

И еще, silverlight совсем никак не поддерживает синхронные http запросы?
Hast вне форума  
Ответить с цитированием
Старый 24.07.2012, 01:11   #83
Опытный игрок
 
Аватар для Digimortal
 
Регистрация: 04.07.2007
Адрес: Спб
Сообщений: 1,758
Репутация: 261 [+/-]
При попытке установить MS Visual Studio 2010...вылезает вот это...каждый раз.

Чем победить?

P.S.
Всё, проблема решена.

Последний раз редактировалось Digimortal; 24.07.2012 в 03:18.
Digimortal вне форума  
Ответить с цитированием
Старый 20.08.2012, 23:32   #84
От заката до рассвета
 
Аватар для $finX
 
Регистрация: 10.06.2009
Адрес: Тюмень
Сообщений: 120
Репутация: 50 [+/-]
ребятушки. я парюсь с xna. с 3d. проблема - программа тормозит. УЖАСНО тормозит. я, в общем-то, сам виноват. но проблема от этого не исчезает.

что вам надобно знать. представьте себе майнкрафт. если не знаете и лень гуглить, то пояснение - визуально это выглядит как стотыщмильон кубиков. и ничего, кроме них. дак вот, у меня майнкрафт. и каждый кубик - это отдельная моделька из 3ds max. и загружаю я несколько тысяч таких моделек. и визуализирую. и тормозит.

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

но полигонов-то столько-же получается! то есть критично количество моделей, а не полигональность. ибо сто моделек по десять полигонов на порядок медленнее, чем десять моделей по сто полигонов.

дак вот. каждую модель я визуализирую отдельным вызовом
Цитата:
BasicEffect effect.EnableDefaultLighting();
вопрос - как делать по-другому? то есть чтоб набрать, например, много одинаковых моделек и все их скопом отрисовать? или полигонами в массив какой запихать и оттуда рисовать (правда, тут с текстурами будет неслабый геморрой). или ещё как. как подскажите?

вопрос глобальный - как сделать так, чтоб не тормозило?
__________________
— Я пью горячий шоколад только в месяцах, где присутствует буква Р.
— Почему?
— Ну. Жизнь без капризов — это не жизнь.

— Все становится лучше, когда есть Bluetooth.

— В этом мире полно бездомных, грязных носков.
— В моем мире нет. (с) ТБВ
$finX вне форума  
Ответить с цитированием
Старый 21.08.2012, 12:04   #85
Кандидат наук
 
Аватар для pokibor
 
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,351
Репутация скрыта [+/-]
$finX, с XNA я дела не имел, последний раз занимался 3D-графикой довольно давно, но позволю себе дать несколько общих советов.
Первый - при компиляции в Debug-режиме 3d-графика тормозит намного существеннее, нежели в Release. По крайней мере, при написании на C++ с Irrlicht так.
Второй - естественно, тысячи кубиков тормозят, поскольку компьютер вынужден рассчитывать видимость для каждого из них. Например, когда кубик окружён со всех сторон шестью другими кубиками, ежу понятно, что он не может быть видимым. Ежу, но не компьютеру. Он сообразит это только когда просчитает видимость всех граней с того места, где находится камера.
Поэтому выход один - оптимизировать код так, чтобы гарантированно невидимые кубики даже не подавались на рендеринг. А в идеале - не подавались не только кубики, а отдельно невидимые грани (т.е. кубик как отдельная моделька из 3dmax'а - это очень плохая идея). Как это сделать? Лезть в глубины XNA и математики, никак иначе. И писать шейдеры.
Ну и наконец, XNA и .NET сами по себе добавляют тормозов, чисто исходя из своей сути и архитектуры. За удобство нужно платить.
__________________
Товарищ, верь: пройдет она -
Эпоха лживых, злых понятий.
Весь мир очнется ото сна,
И на обломках "демократий"
Напишут наши имена!

Мы были волшебницами (оригинальное фентези)
Тень Войны (фанфик по ГП)

Последний раз редактировалось pokibor; 21.08.2012 в 12:07.
pokibor вне форума  
Отправить сообщение для pokibor с помощью ICQ Ответить с цитированием
Старый 21.08.2012, 17:25   #86
От заката до рассвета
 
Аватар для $finX
 
Регистрация: 10.06.2009
Адрес: Тюмень
Сообщений: 120
Репутация: 50 [+/-]
Цитата:
Сообщение от pokibor Посмотреть сообщение
Первый - при компиляции в Debug-режиме 3d-графика тормозит намного существеннее, нежели в Release
знаю. делал в релизе - качественных изменений нет. может, делал как-то неправильно, но всё же.
Цитата:
Сообщение от pokibor Посмотреть сообщение
А в идеале - не подавались не только кубики, а отдельно невидимые грани
дадада! я тоже так хочу. мне только бы код. как создать полигон в xna? не могу найти.

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

лан, я вроде нашёл что-то про примитивы вчера. буду через них думать. спасибо, но вопрос не снят.
__________________
— Я пью горячий шоколад только в месяцах, где присутствует буква Р.
— Почему?
— Ну. Жизнь без капризов — это не жизнь.

— Все становится лучше, когда есть Bluetooth.

— В этом мире полно бездомных, грязных носков.
— В моем мире нет. (с) ТБВ
$finX вне форума  
Ответить с цитированием
Старый 18.09.2012, 13:03   #87
Юзер
 
Регистрация: 08.09.2007
Сообщений: 271
Репутация: 61 [+/-]
Подскажите, пожалуйста.
Как получить кол-во строк в DataGridView не в методе, а в классе, чтобы потом можно было использовать это число в качестве размера массива. Если я делаю так, как в коде ниже, он выдаёт ошибку: "Инициализатор поля не может обращаться к нестатическому полю, методу или свойству "*.Form1.dataGridView1""
Код:
public partial class Form1 : Form
{
   private void button1_Click(object sender, EventArgs e)
   {
    здесь создается таблица нужного размера.
   }

   int r = dataGridView1.RowCount;
   double[,] a = new double[r, r];

   private void button2_Click(object sender, EventArgs e)
   {
    здесь должны производиться операции над массивом a.
   }
   ...
}
__________________
"Надежда умирает последней", - сказала Вера и застрелила Любовь...
Arantar вне форума  
Ответить с цитированием
Старый 18.09.2012, 14:35   #88
От заката до рассвета
 
Аватар для $finX
 
Регистрация: 10.06.2009
Адрес: Тюмень
Сообщений: 120
Репутация: 50 [+/-]
Цитата:
Сообщение от Arantar Посмотреть сообщение
Как получить кол-во строк в DataGridView не в методе, а в классе
ась? оО
странная ошибка - код верен и логичен. разве что - а ты дейтагридвью создаёшь динамически в коде?
ну и вообще, на какой строчке-то хоть ошибка?
__________________
— Я пью горячий шоколад только в месяцах, где присутствует буква Р.
— Почему?
— Ну. Жизнь без капризов — это не жизнь.

— Все становится лучше, когда есть Bluetooth.

— В этом мире полно бездомных, грязных носков.
— В моем мире нет. (с) ТБВ
$finX вне форума  
Ответить с цитированием
Старый 18.09.2012, 14:45   #89
Юзер
 
Регистрация: 08.09.2007
Сообщений: 271
Репутация: 61 [+/-]
Собственно сам код. Выделенное у меня в коде, он считает ошибкой.
Извиняюсь, там немного другой текст ошибки, такой: "Инициализатор поля не может обращаться к нестатическому полю, методу или свойству "*.Form1.r""
Скрытый текст:
Код:
public partial class Form1 : Form
    {
     ...
   public void Form1_Load(object sender, EventArgs e)
        {
            comboBox1.Text = "4x4";
            for (int i = 0; i < 8; i++)
            {
                comboBox1.Items.Add((i + 2) + "x" + (i + 2));
            }
            for (int i = 0; i < 4; i++)
            {
                dataGridView1.Columns.Add("", "X" + Convert.ToString(i + 1));
                dataGridView1.Rows.Add("");
            }
            dataGridView1.Columns.Add("", "B");
        }
   private void button1_Click(object sender, EventArgs e)
        {
            dataGridView1.Rows.Clear();
            dataGridView1.Columns.Clear();
            textBox1.Clear();
            textBox2.Clear();
            string b = comboBox1.Text;
            sbyte v = Convert.ToSByte(Convert.ToString(b[0]));
            dataGridView1.Size = new System.Drawing.Size(100 * v + 135, v * 22 + 26);
            if (v > 4)
                ClientSize = new System.Drawing.Size(368 + (v - 2) * 100, 250 + (v - 2) * 22);
            else ClientSize = new System.Drawing.Size(600, 286);
            for (int i = 0; i < v; i++)
            {
                dataGridView1.Columns.Add("", "X" + Convert.ToString(i + 1));
                dataGridView1.Rows.Add("");
            }
            dataGridView1.Columns.Add("", "B");
        }

        int r = dataGridView1.RowCount;
        double[,] a = new double[r, r];

 private void button2_Click(object sender, EventArgs e)
        {
          операции с массивом a[r, r].
        }
        ...
     }
__________________
"Надежда умирает последней", - сказала Вера и застрелила Любовь...

Последний раз редактировалось Arantar; 18.09.2012 в 14:51.
Arantar вне форума  
Ответить с цитированием
Старый 18.09.2012, 15:02   #90
Игрок
 
Аватар для Pharaon
 
Регистрация: 14.06.2006
Адрес: Future
Сообщений: 672
Репутация: 159 [+/-]
Получить никак).
Это значит ты можешь создать переменную вне функции (то бишь в классе), присвоить её значение внутри функции, а пом создать массив используя переменную в классе.

Это все от того что клоичество столбцов может динамически меняться и значит что вне функции узнать значения не получится. Делай какое нибудь поле аля
Скрытый текст:
Код:
int r
{
get { return dataGridView1.RowCount;}
}

Но создавать массив вне функций а прямо в классе, используя переменную нельзя
__________________
Understanding is impossible...
Η κατανόηση είναι αδύνατο
理解することは不可能である
समझना असंभव है

Mr. Freeman +1

[url=https://deepbit.net][img]https://deepbit.net/userbar/4f1ea27f06917288bf000000_375ff6ce34.png[/img][/url]

Последний раз редактировалось Pharaon; 18.09.2012 в 15:13.
Pharaon вне форума  
Отправить сообщение для Pharaon с помощью ICQ Отправить сообщение для Pharaon с помощью Skype™ Ответить с цитированием
Старый 20.09.2012, 18:58   #91
Юзер
 
Регистрация: 08.09.2007
Сообщений: 271
Репутация: 61 [+/-]
Собственно с этим понятно теперь, но возникла другая проблема.
У меня есть два класса: в одном описываются методы для решения СЛАУ, другой Form1, в котором я их вызываю. Но возникает проблема, нужно передать значение dataGridView1.RowCount в первый класс, в котором это значение есть размер динамических массивов.
__________________
"Надежда умирает последней", - сказала Вера и застрелила Любовь...
Arantar вне форума  
Ответить с цитированием
Старый 20.09.2012, 21:02   #92
Игрок
 
Аватар для Pharaon
 
Регистрация: 14.06.2006
Адрес: Future
Сообщений: 672
Репутация: 159 [+/-]
Что мешает обратиться к гриду или массиву из другого класса?)
Передача данных между классами дело элементарное.
самое просто передавай ксласс форм в конструктор первого класса и обращайся к нему через переменную)
__________________
Understanding is impossible...
Η κατανόηση είναι αδύνατο
理解することは不可能である
समझना असंभव है

Mr. Freeman +1

[url=https://deepbit.net][img]https://deepbit.net/userbar/4f1ea27f06917288bf000000_375ff6ce34.png[/img][/url]

Последний раз редактировалось Pharaon; 20.09.2012 в 21:05.
Pharaon вне форума  
Отправить сообщение для Pharaon с помощью ICQ Отправить сообщение для Pharaon с помощью Skype™ Ответить с цитированием
Старый 20.09.2012, 21:18   #93
Юзер
 
Регистрация: 08.09.2007
Сообщений: 271
Репутация: 61 [+/-]
Продемонстрируйте, пожалуйста.
__________________
"Надежда умирает последней", - сказала Вера и застрелила Любовь...

Последний раз редактировалось Arantar; 21.09.2012 в 02:09.
Arantar вне форума  
Ответить с цитированием
Старый 21.09.2012, 08:16   #94
Игрок
 
Аватар для Pharaon
 
Регистрация: 14.06.2006
Адрес: Future
Сообщений: 672
Репутация: 159 [+/-]
Скрытый текст:
Код:
using System;
using System.Windows.Forms;

namespace WindowsFormsApplication5
{
    public partial class Form1 : Form
    {
       
        SomeClass something;

        public Form1()
        {
            InitializeComponent();
            dataGridView1.Rows.Clear();
            dataGridView1.Columns.Clear();
            for (int i = 0; i < 10; i++)
            {
                dataGridView1.Columns.Add("", "X" + Convert.ToString(i + 1));
                dataGridView1.Rows.Add("");
            }
            dataGridView1.Columns.Add("", "B");

            something = new SomeClass(this);
        }


        private void button1_Click(object sender, System.EventArgs e)
        {
            something.SomeAction();
        }
    }


    public class SomeClass
    {
        Form1 parent;
        public double[,] array;

        public SomeClass(Form1 form)
        {
            parent = form;
            int n = parent.dataGridView1.RowCount;
            array = new double[n, n];
        }

        public void SomeAction()
        {
            MessageBox.Show(array.Length.ToString());
        }
    }
}

Как я понимаю нужно что-то такое. Есть класс Форм1, в котором есть датаГрид, есть какой-то другой класс, в котором есть двумерный массив. При создании второго класса передаем ему данные из первого и обращаемся к ним через переменную.
Датагрид, нужно пометить модификатором public вместо private в функции инициализации компонентов.
Если что-то не так, прошу более подробно объяснить суть, возможно даже с кодом
__________________
Understanding is impossible...
Η κατανόηση είναι αδύνατο
理解することは不可能である
समझना असंभव है

Mr. Freeman +1

[url=https://deepbit.net][img]https://deepbit.net/userbar/4f1ea27f06917288bf000000_375ff6ce34.png[/img][/url]
Pharaon вне форума  
Отправить сообщение для Pharaon с помощью ICQ Отправить сообщение для Pharaon с помощью Skype™ Ответить с цитированием
Старый 21.09.2012, 22:25   #95
Юзер
 
Регистрация: 08.09.2007
Сообщений: 271
Репутация: 61 [+/-]
Pharaon, спасибо, но я решил проблему с помощью метода Array.GetLength.
Но у меня есть вопросы, например можете пояснить кое-какие строчки в коде. Вот эти к примеру.
Скрытый текст:

Код:
Form1 parent;
public SomeClass(Form1 form)
{
    parent = form;
    ...
}


SomeClass something;
public Form1()
{
    something = new SomeClass(this);
}


Тут не совсем получается ещё, размер таблицы у меня же меняется, и он должен каждый раз при её создании в button1_Click передавать её размер в другой класс.
__________________
"Надежда умирает последней", - сказала Вера и застрелила Любовь...

Последний раз редактировалось Arantar; 22.09.2012 в 03:07.
Arantar вне форума  
Ответить с цитированием
Старый 22.09.2012, 07:14   #96
Игрок
 
Аватар для Pharaon
 
Регистрация: 14.06.2006
Адрес: Future
Сообщений: 672
Репутация: 159 [+/-]
Тут дело в чем. Теперь все данные из класса форм доступны в классе SomeClass и наоборот.
Если ты меняешь размер то его данные изменятся и уже изменнные данные ты можешь получить с помощью переменных кооторые есть в твоей цитате.
__________________
Understanding is impossible...
Η κατανόηση είναι αδύνατο
理解することは不可能である
समझना असंभव है

Mr. Freeman +1

[url=https://deepbit.net][img]https://deepbit.net/userbar/4f1ea27f06917288bf000000_375ff6ce34.png[/img][/url]
Pharaon вне форума  
Отправить сообщение для Pharaon с помощью ICQ Отправить сообщение для Pharaon с помощью Skype™ Ответить с цитированием
Старый 22.09.2012, 19:27   #97
Юзер
 
Регистрация: 08.09.2007
Сообщений: 271
Репутация: 61 [+/-]
Поясните, пожалуйста, что конкретно здесь делается, а то работать работает, а как, не совсем понятно.
Скрытый текст:

Код:
Form1 parent;
public SomeClass(Form1 form)
{
    parent = form;
    ...
}


SomeClass something;
public Form1()
{
    something = new SomeClass(this);
}
__________________
"Надежда умирает последней", - сказала Вера и застрелила Любовь...
Arantar вне форума  
Ответить с цитированием
Старый 22.09.2012, 19:51   #98
Игрок
 
Аватар для Pharaon
 
Регистрация: 14.06.2006
Адрес: Future
Сообщений: 672
Репутация: 159 [+/-]
Post

Скрытый текст:
Цитата:
Сообщение от Arantar Посмотреть сообщение
Код:
Определяем объект Класса Форм1, для использование внутри класса SomeClass
Form1 parent;

// Конструктор класса. Когда мы пишем new SomeClass() вызывается эта функция
//Параметром функции служит класс нашей формы
public SomeClass(Form1 form)
{
// Чтобы сохранить переданный объект в переменной и обращаться в нему из любого места класса, присваиваем переменной  parent переданный аргумент.
    parent = form;
    ...
}

// Определяем объект класса SomeClass, чтобы использовать его возможности в любом месте данного класса.
SomeClass something;
public Form1()
{
// Создаем объект класса SomeClass, передав в качестве аргумента(this) текущий, класс, в данном случае Form1 
    something = new SomeClass(this);
}

Комментарии.
Если все это непонятно, то вам надо по возможности чуть лучше изучить ООП, так как шарп на принципах ооп построен.ООП (объектно-ориентированное программирование)
__________________
Understanding is impossible...
Η κατανόηση είναι αδύνατο
理解することは不可能である
समझना असंभव है

Mr. Freeman +1

[url=https://deepbit.net][img]https://deepbit.net/userbar/4f1ea27f06917288bf000000_375ff6ce34.png[/img][/url]

Последний раз редактировалось Pharaon; 22.09.2012 в 19:55.
Pharaon вне форума  
Отправить сообщение для Pharaon с помощью ICQ Отправить сообщение для Pharaon с помощью Skype™ Ответить с цитированием
Старый 04.11.2012, 15:45   #99
Юзер
 
Регистрация: 08.09.2007
Сообщений: 271
Репутация: 61 [+/-]
Скажите, пожалуйста, есть ли у элемента управления NumericUpDown свойство или метод, который определяет было ли увеличено или уменьшено значение этого элемента управления?
__________________
"Надежда умирает последней", - сказала Вера и застрелила Любовь...
Arantar вне форума  
Ответить с цитированием
Старый 04.11.2012, 21:16   #100
Юзер
 
Аватар для CMETAHA

 
Регистрация: 24.06.2008
Адрес: Я тут
Сообщений: 472
Репутация: 172 [+/-]
Arantar, Нет, но у него есть евент ValueChanged.
__________________
"Хуже вопроса не в той теме, может быть только вопрос, о вопросе не в той теме." © *@ndrey*

Контактик Щебет Лицокнижка Спроси меня Гплюс
CMETAHA вне форума  
Отправить сообщение для CMETAHA с помощью ICQ Ответить с цитированием
Ответ

Метки
c#, обсуждение, помощь, программирование

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 12:01.


Powered by vBulletin® Version 3.8.0
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Rambler's Top100 Яндекс цитирования