Форум программистов, компьютерный форум CyberForum.ru

Точки трёхмерного пространства - C++

Восстановить пароль Регистрация
 
barlog
2 / 2 / 0
Регистрация: 03.11.2009
Сообщений: 227
05.05.2011, 20:25     Точки трёхмерного пространства #1
В файл записать координаты точек трёхмерного пространства. Найти количество точек, принадлежащих шару, координаты центра и радиус которого заданы и вводятся с экрана.

Не понимаю вообще как делать!!Особенно не понятно КАК "В файл записать координаты точек трёхмерного пространства".Люди добрые,покажите пожалуйста((
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
almazsr
232 / 169 / 7
Регистрация: 13.11.2010
Сообщений: 425
05.05.2011, 21:10     Точки трёхмерного пространства #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <math.h>
#include <conio.h>
#include <vector>
 
struct point3D
{
public:
    point3D(){}
    point3D(double x, double y, double z)
    {
        this->x=x;
        this->y=y;
        this->z=z;
    }
    friend double distance(point3D a, point3D b)
    {
        return sqrt((b.x-a.x)*(b.x-a.x)+(b.y-a.y)*(b.y-a.y)+(b.z-a.z)*(b.z-a.z));
    }
    friend std::ostream& operator<<(std::ostream& os, point3D point)
    {
        os<<'('<<point.x<<','<<point.y<<','<<point.z<<')';
        return os;
    }
    friend std::istream& operator>>(std::istream& is, point3D& point)
    {
        is>>point.x>>point.y>>point.z;
        return is;
    }
    double x, y, z;
};
 
int main()
{
    point3D center;
    std::vector<point3D> points;
    double radius;
    std::cout<<"Ball's center: ";
    std::cin>>center;
    std::cout<<"Ball's radius: ";
    std::cin>>radius;
    std::ifstream fin("input.txt");
    point3D temp;
    if (!fin.fail())
    {
        while (!fin.eof())
        {
            fin>>temp;
            points.push_back(temp);
        }
    }
    fin.close();
    int count=0;
    for (std::size_t i=0; i<points.size(); i++)
    {
        if (distance(points[i],center)<=radius)
        {
            count++;
        }
    }
    std::cout<<"Count of ball's points: "<<count;
    _getch();
    return 0;
}
barlog
2 / 2 / 0
Регистрация: 03.11.2009
Сообщений: 227
12.05.2011, 18:08  [ТС]     Точки трёхмерного пространства #3
хммм......мне по-другому надо...ВОТ!Смотрите что у меня уже есть -тут есть файл и в нем мы задаем координаты точек (все работает как надо и верно) . Теперь я никак не могу сообразить как составить функцию в которой бы мы писали координаты центра и радиус круга и в ней же проверяли - принадлежат ли точки из файла этому кругу.

Люди добрые, помогите доделать! Кто понимает тут ведь совсем несложно...я не понимаю просто как теперь нам брать эти координаты из файла...вот код.Помогите доделать пожалуйста!!!


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <vcl.h>
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <stdio.h>
#pragma hdrstop
//---------------------------------------------------------------------------
 
#pragma argsused
 
 
 
 
 
const m=3;
 
 FILE  *arf;
 
 
 
void MyCr()
{   int a[m];
   arf= fopen("F:\\TOCHKI\\1\\mat.txt","wb");
    printf("\n");
    int n;   // кол-во строк матрицы
    cout<<"Vvedite kol-vo tochek: " ;
     cin>>n ;
    for (int i=0; i<n;i++)
    {  cout<<endl;
       for (int j=0;j<m;j++)
          { a[j]=(i+1)*(j+1);
            printf("%5d",a[j]);
          }
          fwrite (a, sizeof(a),1, arf);
    }
    fclose(arf);
    cout<<"\nFile was created"<<endl;
       }
 
 
 
 
 
 void MyRead()    // Вывод массива
   {    int a[m];
        FILE *arf ;
        arf= fopen("F:\\TOCHKI\\1\\mat.txt","rb");
        clrscr() ;
       fread(a,sizeof(a),1,arf);
       while (!feof(arf))
      {
         printf("\n");
         for (int j=0;j<m;j++)
           printf("%5d",a[j]);
         fread(a,m*sizeof(int),1,arf);
      }
        fclose(arf);
     }
 
 
 
void MyAppend()
{   int a[m];
    char ch ;
     FILE  *arf;
   randomize();
   arf= fopen("F:\\TOCHKI\\1\\mat.txt","ab");
      do { cout<<endl;
        for (int i=0;i<m;i++)
           {a[i]=random(100)-50;
            cout<<a[i]<<"  ";
            }
        fwrite(a,sizeof a,1,arf);
        cout<<"\n * -- exit" ;
        ch=getch();
    } while (ch!='*');
    fclose(arf);
 
}
 
 
 
 
int main()
{ int  flag;
         while (1)
          {  cout
          << "\n1 -- CREATE"<<endl<<
             "2 -- READ"<<endl<<
             "3 -- APPEND"<<endl<<
             "0 -- EXIT"<<endl ;
           cin>>flag;
           switch (flag)
            {  case 1: MyCr(); break;
               case 2: MyRead();  break;
               case 3: MyAppend();  break;
               case 0: return 0;
            }
          }
}
eXXXXXXXXXXX
30 / 30 / 3
Регистрация: 24.02.2011
Сообщений: 126
12.05.2011, 18:14     Точки трёхмерного пространства #4
Цитата Сообщение от barlog Посмотреть сообщение
Найти количество точек, принадлежащих шару
Цитата Сообщение от barlog Посмотреть сообщение
координаты центра и радиус круга
уточните
barlog
2 / 2 / 0
Регистрация: 03.11.2009
Сообщений: 227
12.05.2011, 19:19  [ТС]     Точки трёхмерного пространства #5
Ну координаты центра шара и его радиус мы задаем сами с клавиатуры,а потом смотирим какие точки (из записанных файл) попадают в этот шар.

ну как бы координаты шара и его радиус

C++
1
2
3
4
5
int a, b, c, R ;
cin>> a;
cin>> b;
cin>> c;
cin>> R;
а потом надо условие с if. Ну вот я и не понимаю как в нем написать что нам нужны именно те точки из файла! Помогите пожалуйста.

if( (x[1]-a)*(x[1]-a)+(x[2]-b)*(x[2]-b)+(x[3]-c)*(x[3]-c)<=R*R )
{ k++ }

но это ведь будет только для одной точки!а точек у нас n-штук!и это n - мы вводим с клавиатуры.

Может тут как-то fseek приписать...чтобы эти координаты из файла извлекать...но я не понимаю как совсем.
Помогите пожалуйста!!!!

Добавлено через 1 минуту
У нас нет матрицы.Если бы была,то понятно было.А тут надо типа как набор одномерных массивов (см. программу выше там всё верно и как надо)

Добавлено через 4 минуты
Помогите пожалуйста,всего-то надо if написать((
almazsr
232 / 169 / 7
Регистрация: 13.11.2010
Сообщений: 425
12.05.2011, 19:19     Точки трёхмерного пространства #6
Цитата Сообщение от barlog Посмотреть сообщение
но это ведь будет только для одной точки!а точек у нас n-штук!и это n - мы вводим с клавиатуры.
barlog, а циклам вас не учили?
Цитата Сообщение от barlog Посмотреть сообщение
У нас нет матрицы.Если бы была,то понятно было.А тут надо типа как набор одномерных массивов (см. программу выше там всё верно и как надо)
Ну так и сделайте 3 одномерных массива: x, y, z.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2011, 19:25     Точки трёхмерного пространства
Еще ссылки по теме:

Вывести расстояние от заданной точки до точки пересечения диагоналей прямоугольников C++
C++ Определить ф-цию, нахождения векторного произведения векторов трёхмерного пространства
Во введенной строке заменить все запятые на точки, а точки - на восклицательные знаки C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
barlog
2 / 2 / 0
Регистрация: 03.11.2009
Сообщений: 227
12.05.2011, 19:25  [ТС]     Точки трёхмерного пространства #7
ВОТ ТУТ ВСЁ СДЕЛАНО!Тут у нас есть все координаты точек в одномерных массивах.
Проблема как их теперь извлечь из файла и составить if!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <vcl.h>
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <stdio.h>
#pragma hdrstop
//---------------------------------------------------------------------------
 
#pragma argsused
 
 
 
 
 
const m=3;
 
 FILE  *arf;
 
 
 
void MyCr()
{   int a[m];
   arf= fopen("F:\\TOCHKI\\1\\mat.txt","wb");
    printf("\n");
    int n;   // кол-во строк матрицы
    cout<<"Vvedite kol-vo tochek: " ;
     cin>>n ;
    for (int i=0; i<n;i++)
    {  cout<<endl;
       for (int j=0;j<m;j++)
          { a[j]=(i+1)*(j+1);
            printf("%5d",a[j]);
          }
          fwrite (a, sizeof(a),1, arf);
    }
    fclose(arf);
    cout<<"\nFile was created"<<endl;
       }
 
 
 
 
 
 void MyRead()    // Вывод массива
   {    int a[m];
        FILE *arf ;
        arf= fopen("F:\\TOCHKI\\1\\mat.txt","rb");
        clrscr() ;
       fread(a,sizeof(a),1,arf);
       while (!feof(arf))
      {
         printf("\n");
         for (int j=0;j<m;j++)
           printf("%5d",a[j]);
         fread(a,m*sizeof(int),1,arf);
      }
        fclose(arf);
     }
 
 
 
void MyAppend()
{   int a[m];
    char ch ;
     FILE  *arf;
   randomize();
   arf= fopen("F:\\TOCHKI\\1\\mat.txt","ab");
      do { cout<<endl;
        for (int i=0;i<m;i++)
           {a[i]=random(100)-50;
            cout<<a[i]<<"  ";
            }
        fwrite(a,sizeof a,1,arf);
        cout<<"\n * -- exit" ;
        ch=getch();
    } while (ch!='*');
    fclose(arf);
 
}
 
 
 
 
int main()
{ int  flag;
         while (1)
          {  cout
          << "\n1 -- CREATE"<<endl<<
             "2 -- READ"<<endl<<
             "3 -- APPEND"<<endl<<
             "0 -- EXIT"<<endl ;
           cin>>flag;
           switch (flag)
            {  case 1: MyCr(); break;
               case 2: MyRead();  break;
               case 3: MyAppend();  break;
               case 0: return 0;
            }
          }
}
Добавлено через 55 секунд
а еще с n далее невозможно работать - т.к оно вводится с клавы!и он не знает чему оно равно далее
Yandex
Объявления
12.05.2011, 19:25     Точки трёхмерного пространства
Ответ Создать тему
Опции темы

Текущее время: 11:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru