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

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

Войти
Регистрация
Восстановить пароль
 
yura332
0 / 0 / 0
Регистрация: 21.09.2009
Сообщений: 25
#1

Трехмерном пространстве - C++

10.12.2009, 20:48. Просмотров 714. Ответов 2
Метки нет (Все метки)

В множестве А1 в трехмерном пространстве найти пару точек с максимальным расстоянием между ними(использовать структуру)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2009, 20:48     Трехмерном пространстве
Посмотрите здесь:

точки на плоскости в трехмерном пространстве - C++
в общем нужно проверять лежат ли 4 точки(отдельный класс состоящих из трех флоатов) в одной плоскости. Подскажите простой способ, если...

Как определить пересечение 2-х треугольников в трехмерном пространстве? - C++
Собсно сабж) Какие есть идеи?

Наследование классов. Длина вектора на плоскости и в трехмерном пространстве - C++
Условие задачи: Создать базовый класс «вектор на плоскости». Элементы класса: поля, задающие координаты точки (статус доступа...

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

Составить описание класса для объектов-векторов, задаваемых координатами концов в трехмерном пространстве - C++
Помогите, пожалуйста, найти ошибку... Составить описание класса для объектов-векторов, задаваемых координатами концов в трехмерном...

Множество попарно различных плоскостей в трехмерном пространстве задано перечислением троек точек, через которые проходит каждая из плоскостей. Вы* бр - C++
В геометрии не силен!!:cry: Множество попарно различных плоскостей в трехмерном пространстве задано перечислением троек точек, через...

Найти min в трехмерном массиве - C++
Помогите доработать программу чтобы выводился min в трёхмерном массиве(сейчас ищет максимальное) #include <iostream> #include...

Вывести фигуру в трехмерном массиве на экран - C++
Программа должна демонстрировать работу с классом объявленным и определённым, класс применяется для работы с трёхмерным массивом . Он...

Как заменить 0 в трехмерном массиве, которые находятся между определенными числами, на -1? - C++
На вход программе дается размер матрицы (n), далее мы увеличиваем ее, но нумеруем только изначальный массив, то есть только нечетные строки...

Многоугольник в пространстве - C++
Добрый день! :) Не могли бы вы мне помочь? У меня такая задача. Даны две точки A и B в трёхмерном пространстве, которые образуют...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
11.12.2009, 01:10     Трехмерном пространстве #2
Как(кем, откуда) задаётся множество А1?

Добавлено через 33 минуты
пусть нами и рандомайзом..
решение "в лоб"
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
#include<iostream>
#define MAXPV 100
//MAXPV - Максимальная удалённость точки от начала координат(для генерации)
#define MAXP 10
//MAXP - максимальное количество точек во множестве(для генерации)
 
 
double rpv() {return ((rand()%(2*MAXPV))-MAXPV);}
// Для генерации случайных координат для точек
 
 
struct points
{
    double x,y,z;       //координаты точки
    points* distant;    //указатель на наиболее удалённую точку.
    double distance;    // и квадрат расстояния до неё.
    points(double x,double y,double z):x(x),y(y),z(z)
        {distant=this; distance = 0;}
};
 
double d(points* p1,points* p2)// возвращает квадрат расстояния между двумя точками
{
    return (p1->x - p2->x)*(p1->x - p2->x)+(p1->y - p2->y)*(p1->y - p2->y)+(p1->z - p2->z)*(p1->z - p2->z);
}
int main()
{
    // поскольку неизвестно откуда брать множество точек,
    // сгенерируем его "великим рандомом".
    srand ( time(NULL) );
    int dimm = rand()%MAXP+2;// количество точек (не меньше двух);
    
    points** a1 = new points*[dimm];
        for(int i=0;i<dimm;i++)
            a1[i] = new points(rpv(),rpv(),rpv());
            
 
 
    //для каждой точки множества, найдём наиболее удалённую
    for(int i=0;i<dimm;i++)
    {
        for(int j=i;j<dimm;j++)
        {
            if(a1[i]->distance<d(a1[i],a1[j]))
            {
                a1[i]->distance = d(a1[i],a1[j]);
                a1[i]->distant = a1[j];
                //Обратное тоже верно:
                a1[j]->distance = a1[i]->distance;
                a1[j]->distant = a1[i];
            }
        }
    }
    
    //среди всех пар найдем пару с наибольшим расстоянием:
    int index = 0;
    for(int i=0;i<dimm;i++)
        index = (a1[index]->distance<a1[i]->distance)?i:index;
    
/*  //Вывод точек.  
    std::cout<<dimm<<std::endl; 
    for(int i=0;i<dimm;i++)
    std::cout<<a1[i]->x<<"\t"<<a1[i]->y<<"\t"<<a1[i]->z<<std::endl;
*/
    //Вывод искомой пары.
    std::cout<<"p1: ";
    std::cout<<a1[index]->x<<"\t";
    std::cout<<a1[index]->y<<"\t";
    std::cout<<a1[index]->z<<std::endl;
    std::cout<<"p2: ";
    std::cout<<a1[index]->distant->x<<"\t";
    std::cout<<a1[index]->distant->y<<"\t";
    std::cout<<a1[index]->distant->z<<std::endl;
    std::cout<<"sqare of distance = "<<d(a1[index],(a1[index]->distant));
    std::cout<<std::endl;
    system("pause");
    return 0;
}
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
11.12.2009, 11:56     Трехмерном пространстве #3
гмм.. я ошибся.
distance не должно хранить квадрат расстояния между точками, так как при расстояниях меньше единицы, утверждение "если a>b то a^2>b^2" становиться неверным.
Для корректной работы функцию d() нужно переписать так:
C++
1
2
3
4
double d(points* p1,points* p2)
{
        return sqrt((p1->x - p2->x)*(p1->x - p2->x)+(p1->y - p2->y)*(p1->y - p2->y)+(p1->z - p2->z)*(p1->z - p2->z));
}
для того чтоб она работала необходимо подключить sqrt :
C++
1
#include<math.h>
в 73 строке должно быть:
C++
1
std::cout<<" distance = "<<d(a1[index],(a1[index]->distant));
таким образом distance будет хранить не квадрат расстояния между точками, а само расстояние, и код будет работать корректно.

ещё раз прошу прощения...
Yandex
Объявления
11.12.2009, 11:56     Трехмерном пространстве
Ответ Создать тему
Опции темы

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