я пишу свой генератор отчетов для землеустройства на основе текстовых файлов с координатами и сталкнулся со следующей проблемой:
1. создаю полилинию в Автокаде, и макросом выгружаю все ее координаты в txt с точностью до 2-го знака после запятой(в Автокаде в Юнитс установлено "Метры" и "0.00"), а недавно написал парсер для MID/MIF в которых точность описания координат 6 знаков после запятой, типа так:
Код: Выделить всё
Region  1
  5
12542.86281 -1649.421804
12561.2033 -1616.825747
12589.73248 -1627.012002
12579.54379 -1665.719729
12542.86281 -1649.421804
    Pen (1,2,0) 
    Brush (2,16777215,16777215)
    Center 12566.29764 -1641.272738Код: Выделить всё
public double Area
        {
            get
            {
                double s = 0;
                double res = 0;
                if (areaValid == false)
                //{
                //    for (int i = 0; i < Vertexs.Count - 1; i++)
                //    {
                //        //_Area += Vertexs[i].X * Vertexs[i + 1].Y - Vertexs[i + 1].X * Vertexs[i].Y;
                //        _Area += (Vertexs[i].X + Vertexs[i + 1].X) * (Vertexs[i].Y - Vertexs[i + 1].Y);
                //    }
                //    //_Area += Vertexs[Vertexs.Count - 1].X * Vertexs[0].Y - Vertexs[0].X * Vertexs[Vertexs.Count - 1].Y;
                //    _Area += (Vertexs[Vertexs.Count - 1].X + Vertexs[0].X) * (Vertexs[Vertexs.Count - 1].Y - Vertexs[0].Y);
                //    _Area = Math.Abs(_Area / 2);
                //    //
                //    //_Area = Math.Round(_Area, 0);
                //    areaValid = true;
                //}
                    
                    for (int i = 0; i < Vertexs.Count; i++)
                    {
                        if (i == 0)
                        {
                            s = Vertexs[i].X * (Vertexs[Vertexs.Count - 1].Y - Vertexs[i + 1].Y); //если i == 0, то y[i-1] заменяем на y[n-1]
                            res += s;
                        }
                        else
                            if (i == Vertexs.Count - 1)
                            {
                                s = Vertexs[i].X * (Vertexs[i - 1].Y - Vertexs[0].Y); // если i == n-1, то y[i+1] заменяем на y[0]
                                res += s;
                            }
                            else
                            {
                                s = Vertexs[i].X * (Vertexs[i - 1].Y - Vertexs[i + 1].Y);
                                res += s;
                            }
                    }
                _Area = Math.Abs(res/2);
                _Area = Math.Round(_Area, prec);
                areaValid = true;
                return _Area;
            }
        }В чем моя ошибка? или они как то по другому считают площадь?
конкретно пример на основе автокада:
внутренности файла
Код: Выделить всё
1007.87 2503.63
22241.68 2503.63
21698.10 11068.55
19217.99 15758.86
17315.44 17220.33
17111.60 17220.33
13442.39 18307.94
11539.84 18307.94
10520.62 18307.94
10860.36 18307.94
8380.25 16948.43
8380.25 16030.76
8380.25 14535.30
8380.25 13889.53
8719.99 13889.53
8719.99 12326.10
7870.64 11850.27
8006.54 11850.27
6002.07 11204.50
6409.76 11204.50
4439.26 10252.84
4575.15 10252.84
2366.84 8009.65
2366.84 8179.59
1721.33 5936.40моя площадь - 244 804 115,72 кв.м. - разница в 67 кв.м.
 . издевки никакой, просто хочу выяснить где ошибаюсь.
 . издевки никакой, просто хочу выяснить где ошибаюсь. , а не плавающими, может все дело в этом наследии времен, когда сопроцессор был сильно дороже процессора ? Может тогда и сойдется.
 , а не плавающими, может все дело в этом наследии времен, когда сопроцессор был сильно дороже процессора ? Может тогда и сойдется. 
 