Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > динамическое создание объектов


Автор: Fyrklod 6.11.2007, 23:50
В общем есть класс объекта, необходимо при выборе метода сборки (к примеру круг или квадрат или треугольник ) разместить указанное число объектов в виде этой фигуры  (т.е. в данном случае в виде круга)
не подскажете каким макаром можно получить эту фигуру на форме из указанного числа объектов

заранее спасибо

Автор: thomas 7.11.2007, 09:04
метод Add() + задать свойства обьекта(x,y)

Добавлено через 1 минуту и 25 секунд
да, делаем в цикле т.к.
Цитата

разместить указанное число объектов 

Автор: Fyrklod 7.11.2007, 13:34
Да все это у меня есть.. и добавление обекта (отедельно я его добавлял) и понимаю, что надо цикл, т.к. определенное число.. не новичек немного до этого додумался smile

проблема в другом... допустим мы делаем круг из 3объектов  (они размещаются на первый взгляд как треугольник)

               об

об                                об

4 объекта

               об

об                                об

               об

в общем нужен просто совет как их заставить в цикле размещаться так как мне надо

Автор: thomas 7.11.2007, 13:39
Fyrklod, 
Цитата

нужен просто совет как их заставить в цикле размещаться так как мне надо 

координаты, куда они добавляются. Продумай алгоритм изменения x и y в зависимости от фигуры и кол-ва обьектов.

ЗЫ и для круга три обьекта явно маловато.

Автор: Baa 7.11.2007, 16:19
Эм, набросал тут... Не понял немного в чем проблема, возможно имелось в виду это:
Код

struct PointD
        {
            public double X;
            public double Y;
        }  

        private void button1_Click(object sender, EventArgs e)
        {
                
            // Системная переменная
            const double dFullCircle = 360.0;
            // Количество секторов
            const int iNumberOfFigures = 7;
            // Размер едичного сектора
            const double dSectorSize = dFullCircle / iNumberOfFigures;
            // Радиус круга :-) 128 /3 потому что это треть моего пикчербокса
            const double dRadius = 128 / 3;
            
            double [] Sectors = new double [iNumberOfFigures];
            
            PointD[] FigurePoints = new PointD[iNumberOfFigures];
            Sectors[0] = 0.0;

            // Вычисляем углы, под которыми наши объекты будут располагаться.
            for (int i = 1; i < (iNumberOfFigures); i++)
            {
                Sectors[i] = Sectors[i - 1] + dSectorSize;
            }

            // Вычисляем координаты для наших объектов, заносим их в массив
            for (int i = 0; i < iNumberOfFigures; i++)
            {
                FigurePoints[i].X = Math.Cos(Sectors[i] / 180 * Math.PI) * dRadius;
                FigurePoints[i].Y = Math.Sin(Sectors[i] / 180 * Math.PI) * dRadius;
            }

            Graphics g = Graphics.FromHwnd(pictureBox3.Handle);
            // Рисуем координатные оси для наглядности
            g.DrawLine(new Pen(Color.Black), 64, 0, 64, 128); // Y - ось
            g.DrawLine(new Pen(Color.Red), 0, 64, 128, 64); // X - ось
            // Переносим систему координат в центр pictureBox'а
            g.TranslateTransform(pictureBox3.Width / 2, pictureBox3.Height / 2);
            // Прикола ради нариусем в центре окружность
            g.DrawEllipse(new Pen(Color.HotPink), -5, -5, 10, 10);
            
            // Соденияем линиями все наши точки
            for (int i = 0; i < iNumberOfFigures - 1; i++)
            {
                g.DrawLine(new Pen(Color.Green),
                    (float)FigurePoints[i].X,
                    (float)FigurePoints[i].Y,
                    (float)FigurePoints[i + 1].X,
                    (float)FigurePoints[i + 1].Y);
            }

            // Завершаем фигуру, соединив последнюю точку с первой
            g.DrawLine(new Pen(Color.Green),
                    (float)FigurePoints[iNumberOfFigures-1].X,
                    (float)FigurePoints[iNumberOfFigures-1].Y,
                    (float)FigurePoints[0].X,
                    (float)FigurePoints[0].Y);
            
            
        }

Тут куча лишних циклов (да и не только циклов) для наглядности. Можно сделать всё в одном, но это уже можно сделать самому.
Ну и заменить рисование на создание объектов smile Если с этим будут сложности - пиши, переделаю smile

Автор: Fyrklod 8.11.2007, 02:49
Baa, Спасибо за помощь... вот это примерно то что надо было

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)