2013-06-30 7 views
-3

У меня есть набор данных с 10000 строк и 10 столбцов в текстовом файле. Вот некоторые samples-Сравнение данных с определенной строкой и столбцом

#  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
    • возьмите значение C от x2
    • возьмите значение D от y2
    • и проверьте, есть ли у них какая-либо общая точка с x3, y3, x4 и y4. Но он не будет проверять значения из собственной строки. Этот процесс будет продолжен и для других строк.
  • Затем я хочу

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

Пример на ответ на замечания

Когда программа взять А = 0,0000 В = 0,0000 С = 0,8147 D = 0,0000, он не будет сравнивать значения с х3 = 0.8147 у3 = 0.1355 x4 = 0.0000 y4 = 0.1355.ie он пропустит строку, из которой он принимает значения x1, y1, x2, y2.

Снова, когда он принимает значения A, B, C, D из второй строки, т.е. 0.A = 8147 B = 0,0000 C = 1,0000 D = 0,0000, затем пропускает значения x3, y3, x4, y4 в строке 2.

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

+0

Вы спрашиваете, как читать данные из текстового файла? – Aravind

+0

да, данные находятся в текстовом файле. – aries0152

+0

да, но вы спрашиваете, как читать эти данные из файла? или что-то другое? каков твой вопрос? –

ответ

0

Это не может быть ответом, но прояснение вопрос к распродано

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

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

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

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

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

class Line
{
Point begin;
Point end;
};

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

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

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

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

+0

Да, это точки полигонов. Я понимаю, что это становится неоднозначным. Я открою новый пост. Спасибо. – aries0152

1

Очевидно, эта проблема состоит из считывания пар чисел (x, y) из списка, который также содержит несколько других вещей. Так давайте Takle, что первый:

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; 

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

+0

Спасибо. Думаю, я могу это использовать. Проголосовал. – aries0152

Смежные вопросы