Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
3 / 3 / 0
Регистрация: 02.02.2020
Сообщений: 69

Решение задачи с нахождением расстояния между двумя точками в 3D пространстве

12.08.2022, 11:11. Показов 3111. Ответов 9

Студворк — интернет-сервис помощи студентам
Здравствуйте! У меня возникла проблема с задачей. По условию задачи даны две точки p1, p2 с координатами xyz, нужно найти расстояние между этими точками в 3D пространстве с помощью класса. Вроде бы задача простая сама по себе, но сама сложность для меня в том, что вычисление расстояния надо провести с помощью метода только с одним параметром method(other), и я не понимаю, как это можно сделать, если требуется две переменные, которые будут давать координаты двух точек, а в методе мы сможем использовать лишь одну (то есть, я именовал координаты одной точки с помощью self, а другой с помощью other, а по требованию задачи так нельзя, только конструктор и method(other)). Я делал вот так вот:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Point:
    def __init__(self, x, y, z):
        self.x1 = x
        self.y1 = y
        self.z1 = z
 
    def method(self, other):
        return sqrt((other.x1 - self.x1) ** 2 + (other.y1 - self.y1) ** 2 + (other.z1 - self.z1) ** 2)
 
p1 = [1, 2, 3]
p2 = [3, 2, 1]
point1 = Point(*p1)
point2 = Point(*p2)
print(point1.method(point2)) # 2.8284271247461903
Код хорошо работает.

А надо как-то так:
Python
1
2
3
4
5
6
7
8
class Point: 
    def __init__(self, x, y, z):
        self.x1 = x
        self.y1 = y
        self.z1 = z
 
    def method(other):
        ?
И я не понимаю, что делать дальше и как, поэтому прошу помощи с заданием у вас, буду рад любой помощи
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.08.2022, 11:11
Ответы с готовыми решениями:

Нахождение расстояния между двумя точками в n-мерном пространстве, используя массив
Задание:Составить программу для нахождения расстояния между двумя точками в n-мерном пространство по формуле. ...

Напишите функции вычисления расстояния между двумя точками,заданными своими координатами (Distance) и нахождения координаты середины между двумя точка
Помогите,пожалуйста! Напишите функции вычисления расстояния между двумя точками,заданными своими координатами (Distance) и нахождения...

Определение точки в пространстве, пересечения 2 точек, расстояния между точками
Доброго времени суток. Помогите с заданием, пожалуйста Задание:Определить класс Точка на плоскости (в пространстве) и во времени. Задать...

9
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
12.08.2022, 11:22
Цитата Сообщение от DaniilDemchenko Посмотреть сообщение
а по требованию задачи так нельзя, только конструктор и method(other))
Если у метода не будет параметра self то это будет статический метод, по сути простая функция. И чтобы вычислить расстояние между двумя точками, надо передать туда координаты двух точек.

Я считаю, что ваша реализация через def method(self, other): абсолютно верная. Уточните еще раз условия.
0
3 / 3 / 0
Регистрация: 02.02.2020
Сообщений: 69
12.08.2022, 11:35  [ТС]
anton78spb, а можно поподробнее, как передать координаты двух точек в статистический метод? Да вот в том то и дело, что мое решение не приняли, я уточнил почему, сказали писать через method(other)
0
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
12.08.2022, 11:59
DaniilDemchenko, Вот общая идея.
Python
1
2
3
4
5
6
7
8
9
from math import sqrt
 
def method(other):
    return sqrt((other[0][0] - other[1][0]) ** 2 + (other[0][1] - other[1][1]) ** 2 + (other[0][2] - other[1][2]) ** 2)
 
p1 = [1, 2, 3]
p2 = [3, 2, 1]
 
print(method((p1, p2)))
Вот реализация для вашего случая.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from math import sqrt
 
class Point:
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z
    
    @staticmethod
    def method(other):
        return sqrt((other[0].x - other[1].x) ** 2 + (other[0].y - other[1].y) ** 2 + (other[0].z - other[1].z) ** 2)
 
p1 = [1, 2, 3]
p2 = [3, 2, 1]
point1 = Point(*p1)
point2 = Point(*p2)
print(Point.method((point1, point2))) # 2.8284271247461903
Code
1
2
3
4
5
2.8284271247461903
 
 
** Process exited - Return Code: 0 **
Press Enter to exit terminal
1
3 / 3 / 0
Регистрация: 02.02.2020
Сообщений: 69
13.08.2022, 08:20  [ТС]
anton78spb, Спасибо огромное за ваши старания, но все равно выдает ту же ошибку: AttributeError: 'str' object has no attribute 'x'. В общем, жесть какая-то
0
Вирусоборец
 Аватар для thyrex
14450 / 7489 / 1582
Регистрация: 06.09.2009
Сообщений: 27,133
13.08.2022, 08:48
Напишите оригинал условия задания в том виде, как Вы его получили, а не в своем вольном пересказе.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38203 / 21135 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14
13.08.2022, 10:39
Цитата Сообщение от DaniilDemchenko Посмотреть сообщение
нужно найти расстояние между этими точками в 3D пространстве с помощью класса
- очередной методический идиотизм. Вероятно, имеется в виду: "Создать класс, моделирующий точку в трехмерном пространстве, определить для этого класса метод, вычисляющий расстояние между точками."


Python
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
class Point3D:
    def __init__(self,x,y,z):
        self.x=x
        self.y=y
        self.z=z
        
    def __str__(self):
        return "("+str(self.x)+","+str(self.y)+","+str(self.z)+")"
        
    # Метод экземпляра
        
    def dist(self,other):
        return((other.x-self.x)**2+(other.y-self.y)**2+(other.z-self.z)**2)**0.5
    
    # Статический метод    
        
    @staticmethod
    def Dist(p1,p2):
        return((p1.x-p2.x)**2+(p1.y-p2.y)**2+(p1.z-p2.z)**2)**0.5
        
p1=Point3D(1,2,1)
p2=Point3D(0,-1,2)
 
print(p1)
print(p2)
 
print(p2.dist(p1))
print(p1.dist(p2))
print(Point3D.Dist(p1,p2))
1
3 / 3 / 0
Регистрация: 02.02.2020
Сообщений: 69
13.08.2022, 11:39  [ТС]
thyrex, Вот полный текст:
Создать класс Point3D, представляющий собой точку в трёхмерном пространстве с тремя полями x, y, z и методом distance(other), вычисляющим расстояние между двумя точками. Конструктор класса принимает координаты x, y, z. Метод distance должен выбрасывать исключение ValueError, если в него передан параметр неверного типа.

Добавлено через 50 секунд
Добавлено через 1 минуту
Catstail, Огромное спасибо за ваш ответ, но, к сожалению, ни один из вариантов не подошел, как бы я их не крутил(
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38203 / 21135 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14
13.08.2022, 12:03
DaniilDemchenko, а что значит "не подошел"? И откуда я знал, что "Метод distance должен выбрасывать исключение ValueError, если в него передан параметр неверного типа"?

А... Я догадываюсь... Метод должен был называться distance, а у меня он называется dist. Верно?

Добавлено через 5 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    # Метод экземпляра
        
    def distance(self,other):
        if type(other) is Point3D:
            return((other.x-self.x)**2+(other.y-self.y)**2+(other.z-self.z)**2)**0.5
        else:
            raise ValueError("Неверен параметр метода distance")
    
    # Статический метод    
        
    @staticmethod
    def dist(p1,p2):
        if type(p1) is Point3D and type(p2) is Point3D:
            return((p1.x-p2.x)**2+(p1.y-p2.y)**2+(p1.z-p2.z)**2)**0.5
        else:
            raise ValueError("Неверен один из параметров метода dist")
1
3 / 3 / 0
Регистрация: 02.02.2020
Сообщений: 69
13.08.2022, 12:50  [ТС]
Catstail, нет нет, вы все правильно сделали, я потом под себя переделал, а про ValueError не упомянул из-за ненадобности, т.к. это последнее, о чем надо было задумываться. У меня конкретно выскакивает ошибка, что "class missing 1 required positional argument p2", но тут ситуация такая, что на проверку работу я отправляю на сайт, где авточекер уже проверяет код, подставляя свои значения и переменные, а так в PyСharm все хорошо, ваш код работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.08.2022, 12:50
Помогаю со студенческими работами здесь

Составить функцию для определения расстояния между точками A и B в мерном пространстве
Здравствуйте. Нужна помощь. Составить функцию для определения расстояния между точками A и B в n-мерном пространстве по формуле ...

Нахождение расстояния между двумя точками
Коллеги помогите пожалуйста решить данную задачу по паскалю. Или просто объясните алгоритм действия в данной ситуации, т.к. логически...

Поиск расстояния между двумя точками
вообщето всего четыре точки... ладно, буду краток и по порядку: есть image на котором лежат 4 точки 2-х цветов (попарно) как правельно...

Вычисление расстояния между двумя точками
*Вычислить расстояние между двумя точками A и B с данными координатами x1, y1 и x2, y2. * Как это написать на FreeBasik ? Я...

Вычисление расстояния между двумя точками
Четыре точки заданы своими координатами X(x1, x2, x3), Y(y1, y2, y3), Z(z1, z2, z3), T(t1, t2, t3). Выяснить, какие из них находятся на...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru