я пишу свой генератор отчетов для землеустройства на основе текстовых файлов с координатами и сталкнулся со следующей проблемой:
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 кв.м.