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


Автор: Lottarend 8.7.2010, 15:41
Есть pictureBox. Столкнулся с такой проблемой: нужно систему координат переделать. У меня в массиве миллионные координаты - они просто не влезают в картинку. Пробовал сделать все методом школьной пропорции, но не получилось.

 
Код

public void PrePoint(double x, double y)
        {
            //беру данные из массивов, нахожу среднее значение
            for (int i = 0; i < arrx.Count; i++)
            {
                if (i == 0)
                    Result = Convert.ToDouble(arrx[i]);
                else
                    Result = Result + Convert.ToDouble(arrx[i]);                   
            }
            for (int i = 0; i <arry.Count; i++)
            {
                if (i == 0)
                    Result2 = Convert.ToDouble(arry[i]);
                else
                    Result2 = Result2 + Convert.ToDouble(arry[i]);
            }
            Srednee = Result / arrx.Count;
            Srednee2 = Result2 / arry.Count;
            Mashtab = Srednee;
            Mashtab2 = Srednee2;
        //Масштабирую. Не знаю точно, можно ли так делать. Принимая среднее значение за 0, переношу его в центр картинки.
    //DH,DW - высота и ширина картинки
            while (Srednee > DH / 2)
                Srednee = Srednee / 1.1;
            while (Srednee2 > DW / 2)
                Srednee2 = Srednee2 / 1.1;    
            for (int i = 0; i < arrx.Count; i++)
            {
                double d = Convert.ToDouble(arrx[i]);
                //получаю кол-во координат на 1 пиксель
                double prop = Mashtab/ Srednee;
                double prop2 = Mashtab2 / Srednee2;
                double pix = d / prop;
                double f = Convert.ToDouble(arry[i]);
                double pix2 = f / prop2;
                arrx1.Add(pix);
                arry1.Add(pix2);     
             }
            
    }

Потом, все это прорисовывается.

 
Код

private void RePaint_D(object sender, PaintEventArgs e)
        {
            Pen B = new Pen(Color.Black, 1);
            Graphics G = e.Graphics;
            Point pb = new Point();
            Point pe = new Point();
            pb.X = DW / 2;
            pb.Y = 0;
            pe.X = DW / 2;
            pe.Y = DH;
            e.Graphics.DrawLine(B, pb, pe);
            pb.X = 0;
            pb.Y = DH / 2;
            pe.X = DW;
            pe.Y = DH / 2;
            e.Graphics.DrawLine(B, pb, pe);
            e.Graphics.DrawEllipse(B, 0, 0, DW - 2, DH - 2);
            PrePoint(x, y);
            e.Graphics.TranslateTransform (Convert.ToInt32(Srednee), Convert.ToInt32(Srednee2));
            for (int i = 0; i < arrx1.Count & i < arry1.Count; i++)
            {
                e.Graphics.DrawEllipse(B, Convert.ToInt32(arrx1[i]), Convert.ToInt32(arry1[i]), 10, 10);
            }    
            
        }


Проблема в том, что прорисовываемая точка получается вне круга. Будь все на бумажке - я бы методом линейки все на круг перенес. Но тут что делать - не знаю, да и вряд ли я до этого все правильно сделал. Может быть, можно как-то переделать систему координат? Обозначить нулевое и максимальное значение, например. Чтобы оно все автоматом размещалось.
Программированием только недавно начал заниматься, так что во многом не разбираюсь. Буду очень признателен, если кто-нибудь кинет примерчик на эту тему.
Надеюсь, кто-нибудь откликнется и объяснит мне, хотя бы приблизительно.

Вот так вот получилось. Точка в самом углу.
user posted image

Автор: Lottarend 10.7.2010, 01:38
Никто с такой проблемой не сталкивался?

Автор: KelTron 10.7.2010, 08:52
Объясни подробно что надо нарисовать, что за точка и тд

Автор: Lottarend 10.7.2010, 08:57
Есть лог с GPS приемника. По координатам строится точка - они переводятся в географические. Вся сложность в том, что они получаются миллионными. Рисуется эллипс, на нем должна отображаться точка с этими координатами.
В обычные координаты у меня вроде получилось привести (хотя черт его знает, правильно или нет), а теперь нужно, чтобы как-то высчитывалось, попала ли точка в эллипс. Если нет - проецировалась на него.
Ну и, если есть какой-нибудь способ отмасштабировать систему координат таким образом, чтобы в нее миллионы влезали - это будет здорово.

Автор: Lottarend 11.7.2010, 12:26
Мде. Топаем на следующий форум...

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