Сравнение данных с конкретной строкой и столбцом

У меня есть набор данных с 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 от x1
    • принять значение B из y1
    • принять значение С от х2
    • принять значение D от у2
    • и проверьте, имеют ли они общую точку с x3, y3, x4 и y4. Но он не будет проверять значения из своего собственного ряда. Этот процесс будет продолжаться и для других строк.
  • Тогда я хочу

    • принять значение A от x2
    • принять значение B от у2
    • принять значение С от х3
    • принять значение D от y3
    • и проверьте, имеют ли они общую точку с x1, y1, x4 и y4. И, как указано выше, он не будет проверять значение своей собственной строки, а также будет применяться к row2, row3 …. и т. Д.

Пример ответа на комментарии

Когда программа принимает 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 ,

Я хотел, чтобы он посчитал номер совпадающей точки и вернул номер строки, в которой он нашел точку. Как мне это сделать?

-3

Решение

Ясно, что эта проблема состоит в чтении пар чисел (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;

Теперь вы можете использовать значения в строке, чтобы определить, соответствует ли это вашим условиям или нет, и вывести соответствующую информацию.

1

Другие решения

Это может быть не ответ, а уточняющий вопрос к О.П.

Предполагая, что текстовый файл представляет собой таблицу точек для четырехстороннего многоугольника и площади многоугольника.

Это первый вопрос, чтобы найти какие-либо пересечения между отрезком линии [x1,y1,x2,y2] и отрезок [x3, y3, x4, y4]?

Хотите проверить линейный сегмент [x1,y1,x2,y2] против точек из других рядов?

В любом случае я предлагаю следующее:

  • Создайте класс Point, содержащий значения X и Y.
  • Создайте линию класса, которая содержит две точки:

class Line
{
Point begin;
Point end;
};

  • Создайте класс с именем Polygon с 4 точками и областью:

class Polygon
{
Point point_container[4];
double area;
};

  • Читайте в файле в std::vector<Polygon>,
  • Определите ваш алгоритм с точки зрения точек, линий и полигонов.
    Думайте с точки зрения многоугольников, точек и линий (сегментов).

Надеюсь, это должно прояснить путаницу. Я предлагаю сделать новый пост и говорить с точки зрения точек и полигонов.

0

По вопросам рекламы [email protected]