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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
barlog
2 / 2 / 0
Регистрация: 03.11.2009
Сообщений: 227
#1

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

05.05.2011, 20:25. Просмотров 777. Ответов 6
Метки нет (Все метки)

В файл записать координаты точек трёхмерного пространства. Найти количество точек, принадлежащих шару, координаты центра и радиус которого заданы и вводятся с экрана.

Не понимаю вообще как делать!!Особенно не понятно КАК "В файл записать координаты точек трёхмерного пространства".Люди добрые,покажите пожалуйста((
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2011, 20:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Точки трёхмерного пространства (C++):

Определить ф-цию, нахождения векторного произведения векторов трёхмерного пространства - C++
Определить ф-цию, нахождения векторного произведения векторов трёхмерного пространства(без массивов). Параметрами ф-ции должны быть...

Передача трёхмерного массива в функцию - C++
Необходимо передать СТАТИЧЕСКИЙ трёхмерный массива в функцию Почему-то на funct (int*** iArray) компилятор ругается. Может быть потому...

Замкнут ли объём трёхмерного многоугольника? - C++
Есть набор граней в пространстве, которые из себя представляют произвольные 2D многоугольники, как можно проверить, образуют ли они в купе...

Выделить память для трёхмерного массива - C++
Пожалуйста помогите! нужно решить 4 задания, но у меня совершенно нет времени! срочно нужно ехать к девушке...надеюсь на ваше понимание и...

Запись трёхмерного массива string в файл - C++
Задан массив string M, который в процессе работы будет ежедневно пополнятся новыми словами. Как его записывать в файл, чтобы было удобно...

Во введенной строке заменить все запятые на точки, а точки - на восклицательные знаки - C++
Во введенной строке заменить все запятые на точки, а точки - на восклицательные знаки. Подсчитать количество сделанных замен.

6
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;
}
1
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;
            }
          }
}
0
eXXXXXXXXXXX
30 / 30 / 3
Регистрация: 24.02.2011
Сообщений: 126
12.05.2011, 18:14 #4
Цитата Сообщение от barlog Посмотреть сообщение
Найти количество точек, принадлежащих шару
Цитата Сообщение от barlog Посмотреть сообщение
координаты центра и радиус круга
уточните
0
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 написать((
0
almazsr
232 / 169 / 7
Регистрация: 13.11.2010
Сообщений: 425
12.05.2011, 19:19 #6
Цитата Сообщение от barlog Посмотреть сообщение
но это ведь будет только для одной точки!а точек у нас n-штук!и это n - мы вводим с клавиатуры.
barlog, а циклам вас не учили?
Цитата Сообщение от barlog Посмотреть сообщение
У нас нет матрицы.Если бы была,то понятно было.А тут надо типа как набор одномерных массивов (см. программу выше там всё верно и как надо)
Ну так и сделайте 3 одномерных массива: x, y, z.
0
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 далее невозможно работать - т.к оно вводится с клавы!и он не знает чему оно равно далее
0
12.05.2011, 19:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2011, 19:25
Привет! Вот еще темы с ответами:

Во введенной строке заменить все запятые на точки, а точки - на восклицательные знаки - C++
15. В введенной строке заменить все запятые на точки, а точки - на восклицательные знаки. Подсчитать количество таких замен. почему оно...

В символьной строке вместо каждой точки вставить три точки - C++
В символьной строке типа char, вводимой с клавиатуры вместо каждой найденной точки вставить три точки Желательно использовать только...

Найти точки пересечения прямых проходящих через заданные точки - C++
Всем привет! Прошу помощи в решении задачи: Дана система координат X:Y (по 25 точек в каждую сторону) В ней расположен ряд точек в...

Вывести расстояние от заданной точки до точки пересечения диагоналей прямоугольников - C++
Прямоугольники заданы координатами их вершин. 1)Вывести расстояние от заданной точки до точки пересечения диагоналей. 2) Вывести...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru