У меня есть набор данных с 10000 строк и 10 столбцов в текстовом файле. Вот несколько примеров
# x1 y1 x2 y2 x3 y3 x4 y4 Area
1 0.0000 0.0000 0.8147 0.0000 0.8147 0.1355 0.0000 0.1355 0.1104
2 0.8147 0.0000 1.0000 0.0000 1.0000 0.1355 0.8147 0.1355 0.0251
3 0.8147 0.1355 0.9058 0.1355 0.9058 0.8350 0.8147 0.8350 0.0637
4 0.0000 0.1355 0.8147 0.1355 0.8147 1.0000 0.0000 1.0000 0.7043
5 0.9058 0.1355 1.0000 0.1355 1.0000 0.8350 0.9058 0.8350 0.0659
6 0.9058 0.8350 1.0000 0.8350 1.0000 1.0000 0.9058 1.0000 0.0155
7 0.8147 0.8350 0.9058 0.8350 0.9058 1.0000 0.8147 1.0000 0.0150
Я хотел бы проверить эти пункты с помощью этой программы
#include <iostream>
#include <cmath>
using namespace std;
double CheckPoint(){
double slope, intercept,A, B, C, D,px, py,left, top, right, bottom,dx, dy;
cin >> A; // take from column
cin >> B; // take from column
cin >> C; // take from column
cin >> D; // take from column
cin >> px; // take value from other rows and column and check
cin >> py; // take value from other rows and column and check
dx = C - A;
dy = D - B;
slope = dy / dx;
// y = mx + c
// intercept c = y - mx
intercept = B - slope * A; // which is same as D - slope * C
// For Bounding Box
if(A < C)
{
left = A;
right = C;
}
else
{
left = C;
right = A;
}
if(B < D)
{
top = B;
bottom = D;
}
else
{
top = B;
bottom = D;
}
if( slope * px + intercept > (py - 0.01) &&
slope * px + intercept < (py + 0.01))
{
if( px >= left && px <= right &&
py >= top && py <= bottom )
{
// cout the numbers of common point and the line number
}
else
// cout the numbers of common point and the line number
}
else
// cout no common point;
}
int main()
{
cout<<CheckPoint();
return 0;
}
Сначала я хочу
Тогда я хочу
Пример ответа на комментарии
Когда программа принимает A = 0,0000 B = 0,0000 C = 0,8147 D = 0,0000, она не будет сравнивать значения с x3 = 0,8147 y3 = 0,1355 x4 = 0,0000 y4 = 0,1355.ie пропустит строку, из которой она берет значения x1, y1, x2, y2.
Опять же, когда он принимает значения A, B, C, D из 2-й строки, то есть 0.A = 8147 B = 0,0000 C = 1,0000 D = 0,0000, тогда он пропускает значения x3, y3, x4, y4 в строке 2 ,
Я хотел, чтобы он посчитал номер совпадающей точки и вернул номер строки, в которой он нашел точку. Как мне это сделать?
Ясно, что эта проблема состоит в чтении пар чисел (x, y) из списка, который также содержит несколько других вещей. Итак, давайте сначала рассмотрим это:
std::fstream fin("infile.txt"); // Adjust as needed.struct Point
{
double x, y;
};
struct Line
{
int lineNum;
Point pts[4];
double area;
}
Line ln;
fin >> ln.lineNum; // Read the line number.
for(int i = 0; i < 4; i++)
{
fin >> line.pts[i].x >> line.pts[i].y;
}
fin >> ln.area;
Теперь вы можете использовать значения в строке, чтобы определить, соответствует ли это вашим условиям или нет, и вывести соответствующую информацию.
Это может быть не ответ, а уточняющий вопрос к О.П.
Предполагая, что текстовый файл представляет собой таблицу точек для четырехстороннего многоугольника и площади многоугольника.
Это первый вопрос, чтобы найти какие-либо пересечения между отрезком линии [x1,y1,x2,y2]
и отрезок [x3, y3, x4, y4]
?
Хотите проверить линейный сегмент [x1,y1,x2,y2]
против точек из других рядов?
В любом случае я предлагаю следующее:
class Line
{
Point begin;
Point end;
};
class Polygon
{
Point point_container[4];
double area;
};
std::vector<Polygon>
, Надеюсь, это должно прояснить путаницу. Я предлагаю сделать новый пост и говорить с точки зрения точек и полигонов.