Форум программистов, компьютерный форум, киберфорум
Геометрия
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 10.04.2017
Сообщений: 10

Сменить систему координат массива точек

25.06.2017, 11:48. Показов 2859. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Задача следующая.
Дан массив точек arr(1 To 3, 1 To N).Где 1 to 3 система координат xyz. n - количество точек. Причем n всегда > 3.
Известно, что массив образует плоскость.
Нужно. Изменить массив таким образом, чтобы каждая его точка принадлежала системе координат XY. Для последующего сокращения массива до 1 to 2. (xy)
Уважаемые знатоки буду вам признателен за подсказки.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.06.2017, 11:48
Ответы с готовыми решениями:

Ввод и вывод массива декартовых координат n точек на плоскости
Помогите написать программу!! Организуйте в консольном приложении ввод и вывод массива декартовых...

Преобразование глобальных координат точки в локальную систему координат, задаваемую четырехугольником
Добрый вечер! Есть произвольный четырехугольник на плоскости. Известны глобальные координаты всех вершин четырехугольника(а значит и...

Заданы 2 одномерных массива x, y с координатами точек. Найти наиболее удаленную от начала координат точку.
напишите пожалуйста) Заданы 2 одномерных массива x, y с координатами точек. Найти наиболее удаленную от начала координат...

17
Эксперт по математике/физике
 Аватар для eropegov
505 / 465 / 100
Регистрация: 30.01.2017
Сообщений: 1,371
25.06.2017, 13:05
Одну из точек принимаете за начало координат в новой системе (кстати, не надо обозначать новые координаты теми же буквами, что и старые - коллизия обозначений недопустима: пусть новые координаты будут, скажем, https://www.cyberforum.ru/cgi-bin/latex.cgi?u, v). Берёте ещё две точки, проводите из нового начала координат векторы в эти две точки - это будут базисные векторы (для простоты я сейчас беру случай, когда эти векторы линейно независимы). Соответственно, в новой системе координат эти две точки получают координаты https://www.cyberforum.ru/cgi-bin/latex.cgi?(1,0) и https://www.cyberforum.ru/cgi-bin/latex.cgi?(0,1). Ну а остальные уже можно выразить.
0
0 / 0 / 0
Регистрация: 10.04.2017
Сообщений: 10
25.06.2017, 16:32  [ТС]
А можно на примере массива из трех точек уточнить
a=(50,10,0)
b=(70,40,-20)
c=(100,-30,10)
Я просто пробовал точке присвоить a (0,0), затем нашел отрезок ab=41,23..затем отрезок ac=64,81..

точку b переориентировал как b=(41.23,0)
осталось найти с по 2 точкам и двум отрезкам , но опять же точка с имеет 2 решения. Запутался.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
25.06.2017, 20:56
Из трех точек A,B,C сделать два вектора A0 и A1 с началом в точке A.
Кросс продукт A0 и A1 даст вектор A2(как нормаль к плоскости точек).
Кросс продукт A2 и A0 даст вектор A3.

Сделать уравнения двух прямых по двум точкам.
Прямая0=Точка A и вектор A0 будет ось X.
Прямая1=Точка A и вектор A3 будет ось Y.

Найти длину перпендикуляра из точек массива на Прямая0 это будет X координата.
Найти длину перпендикуляра из точек массива на Прямая1 это будет Y координата.

Длинна перпендикуляра из точки до прямой по двум точкам в 3д вроде эта:
Подобие math.h для геометрии

Добавлено через 27 секунд
Из трех точек A,B,C сделать два вектора A0 и A1 с началом в точке A.
Кросс продукт A0 и A1 даст вектор A2(как нормаль к плоскости точек).
Кросс продукт A2 и A0 даст вектор A3.

Сделать уравнения двух прямых по двум точкам.
Прямая0=Точка A и вектор A0 будет ось X.
Прямая1=Точка A и вектор A3 будет ось Y.

Найти длину перпендикуляра из точек массива на Прямая0 это будет X координата.
Найти длину перпендикуляра из точек массива на Прямая1 это будет Y координата.

Длинна перпендикуляра из точки до прямой по двум точкам в 3д вроде эта:
Подобие math.h для геометрии
1
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
27.06.2017, 21:14
Вячеслав81, тема еще актуальна?
0
0 / 0 / 0
Регистрация: 10.04.2017
Сообщений: 10
27.06.2017, 23:47  [ТС]
Да.. Туплю, потею ..но не понимаю . Помогите люди добрые.
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
28.06.2017, 00:13
Лучший ответ Сообщение было отмечено Вячеслав81 как решение

Решение

Используйте первые три точки для определения системы координат. Как вам и советовали, вектора A3,A1,A2 будут новым базисом. Базис у вас получился ортогональный. Его еще нужно нормировать, чтобы матрицу перехода было легко обратить путем транспонирования. Эта обратная матрица умножается на вектор со старыми координатами и получается вектор с новыми координатами. У первого вектора новые координаты будут нулевыми. После пересчета третья координата у каждой точки должна быть очень близка к нулю, если, конечно, точки расположены в одной плоскости. У вас бейсик был? Вот на VB скрипте посмотрите что получается.

Visual Basic
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
sub cross(a,b,c)
c(1)=a(2)*b(3)-a(3)*b(2)
c(2)=a(3)*b(1)-a(1)*b(3)
c(3)=a(1)*b(2)-a(2)*b(1)
end sub
 
sub norm(a)
m=1.0/sqr(a(1)*a(1)+a(2)*a(2)+a(3)*a(3))
a(1)=m*a(1)
a(2)=m*a(2)
a(3)=m*a(3)
end sub
 
sub matprod(p,a,b)
b(1)=p(1,1)*a(1)+p(1,2)*a(2)+p(1,3)*a(3)
b(2)=p(2,1)*a(1)+p(2,2)*a(2)+p(2,3)*a(3)
b(3)=p(3,1)*a(1)+p(3,2)*a(2)+p(3,3)*a(3)
end sub
 
N = 5
dim arr(3, 5)
arr(1,1)=50  : arr(2,1)=10  : arr(3,1)=0
arr(1,2)=70  : arr(2,2)=40  : arr(3,2)=-20
arr(1,3)=100 : arr(2,3)=-30 : arr(3,3)=10
arr(1,4)=40  : arr(2,4)=110 : arr(3,4)=-50
arr(1,5)=80  : arr(2,5)=-60 : arr(3,5)=30
 
dim a0(3), a1(3), a2(3), a3(3)
dim per(3,3)
 
a0(1)=arr(1,2)-arr(1,1)
a0(2)=arr(2,2)-arr(2,1)
a0(3)=arr(3,2)-arr(3,1)
a1(1)=arr(1,3)-arr(1,1)
a1(2)=arr(2,3)-arr(2,1)
a1(3)=arr(3,3)-arr(3,1)
 
cross a0,a1,a2
norm a1
norm a2
cross a1,a2,a3
' третий вектор уже не нужно нормировать, поскольку у нас были нормированы сомножители
 
' Транспонированная матрица перехода. Вектора нового базиса располагаем по строкам.
per(1,1)=a3(1)
per(1,2)=a3(2)
per(1,3)=a3(3)
per(2,1)=a1(1)
per(2,2)=a1(2)
per(2,3)=a1(3)
per(3,1)=a2(1)
per(3,2)=a2(2)
per(3,3)=a2(3)
 
' Пересчитываем координаты всех точек, кроме первой
for i=2 to N
a0(1)=arr(1,i)-arr(1,1)
a0(2)=arr(2,i)-arr(2,1)
a0(3)=arr(3,i)-arr(3,1)
matprod per, a0, a1
arr(1,i)=a1(1)
arr(2,i)=a1(2)
arr(3,i)=a1(3)
next
 
' Новые координаты первой точки
arr(1,1)=0
arr(2,1)=0
arr(3,1)=0
 
' Печать результата (закомментировано)
'msgbox arr(1,2)
'msgbox arr(2,2)
'msgbox arr(3,2)
'msgbox arr(1,3)
'msgbox arr(2,3)
'msgbox arr(3,3)
'msgbox arr(1,4)
'msgbox arr(2,4)
'msgbox arr(3,4)
'msgbox arr(1,5)
'msgbox arr(2,5)
'msgbox arr(3,5)
1
0 / 0 / 0
Регистрация: 10.04.2017
Сообщений: 10
28.06.2017, 01:21  [ТС]
Palva, вы прям в точку попали. Ваш код пока не запускал. Завтра посмотрю. Единственное чем я владею немножко -это VBA. А задача эта взята для решения своих заморочек по анализу и проектированию в API SolidWorks. По образованию я гуманитарий , по этому и тяжело решать. Просто мы это не проходили в школе и ВУЗе. В любом случае всем отвечавшим огромнейшее спасибо.
0
1728 / 1020 / 181
Регистрация: 03.06.2012
Сообщений: 1,220
28.06.2017, 13:23
Цитата Сообщение от Вячеслав81 Посмотреть сообщение
Известно, что массив образует плоскость.
В принципе, это условие может выполняться с некоторой погрешностью. Если это действительно так, то плоскость, построенная по каким-либо 3-м точкам из заданных, может оказаться расположенной неудачно. В таком случае оптимальное расположение плоскости можно искать методом наименьших квадратов.
0
0 / 0 / 0
Регистрация: 10.04.2017
Сообщений: 10
29.06.2017, 01:01  [ТС]
То что массив образует плоскость - 100%. Я данные снимаю из модели. Про оптимальное расположение плоскости не совсем понял. Задача состоит избавиться от любой их 3 возможных координат... Желательно со стартовой точкой (0,0) но не обязательно.
Никак не могу найти время посидеть с задачкой, днем работа , вечером дела..Отпишу по результату.
0
1728 / 1020 / 181
Регистрация: 03.06.2012
Сообщений: 1,220
29.06.2017, 01:12
Цитата Сообщение от Вячеслав81 Посмотреть сообщение
То что массив образует плоскость - 100%
Если данные не содержат погрешностей, то проблем нет.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
29.06.2017, 18:48
Цитата Сообщение от Вячеслав81 Посмотреть сообщение
Я данные снимаю из модели.
Изначальная задача что? Зачем убирать одну из координат?
Мне кажется скорей всего не нужно ничего убирать. У вас будут 3д координаты которым Z нужно будет усреднить в группе т.к. это замер то они все с ошибкой всегда.
У вас Z будет одинаковая для всех точек плоскости это и “уберет” одну из координат.
Группировка точек вам ничего не даст т.к. у вас всегда начало координат группы из плоскости задает одна точка из замера группы.
Для модели все координаты точек должны быть в глобальных координатах. Вот ваша высота зонда замера это и есть Z координата глобальная.
0
1728 / 1020 / 181
Регистрация: 03.06.2012
Сообщений: 1,220
29.06.2017, 19:11
Excalibur921, задача может состоять в уменьшении размерности данных (например, методом главных компонент). Наверняка сказать трудно, т.к. ТС неточно формулирует задачу.
0
0 / 0 / 0
Регистрация: 10.04.2017
Сообщений: 10
02.07.2017, 22:17  [ТС]
Товарищи, у меня для двумерных координат есть много собственных разработок, в виде кода VBA. Переделывать ничего не хочу. Поэтому и избавляюсь от z. В основном все это нужно для вывода в печать определенных плоскостей тел SW. Сейчас мне необходимо преобразовать координаты 2 мерного массива таким образом, чтобы избавиться от отрицательных чисел. Но это я попробую сам реализовать. В 2 мерке как то проще соображаю.

Выражаю огромную благодарность за решение данной задачи. Сам я бы долго такое делал. Еще раз огромное человеческое спасибо.
Миниатюры
Сменить систему координат массива точек  
0
0 / 0 / 0
Регистрация: 10.04.2017
Сообщений: 10
02.07.2017, 22:17  [ТС]
Товарищи, у меня для двумерных координат есть много собственных разработок, в виде кода VBA. Переделывать ничего не хочу. Поэтому и избавляюсь от z. В основном все это нужно для вывода в печать определенных плоскостей тел SW. Сейчас мне необходимо преобразовать координаты 2 мерного массива таким образом, чтобы избавиться от отрицательных чисел. Но это я попробую сам реализовать. В 2 мерке как то проще соображаю.

Выражаю огромную благодарность за решение данной задачи. Сам я бы долго такое делал. Еще раз огромное человеческое спасибо.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
02.07.2017, 22:43
Цитата Сообщение от Вячеслав81 Посмотреть сообщение
есть много собственных разработок
Страшно даже представить математическую сложность этих алгоритмов =).
Цитата Сообщение от Вячеслав81 Посмотреть сообщение
преобразовать координаты 2 мерного массива таким образом, чтобы избавиться от отрицательных чисел.
Найти минимальное число в массиве по X, прибавить всем X. Тоже найти по Y прибавить всем…
Это математика за 1 класс =).
0
0 / 0 / 0
Регистрация: 10.04.2017
Сообщений: 10
02.07.2017, 23:20  [ТС]
В этих алгоритмах по сути нет ничего сложного. Просто кода много по объему. Была потрачена мною уйма времени на написание.
Найти минимальное число в массиве по X, прибавить всем X. Тоже найти по Y прибавить всем…
Это математика за 1 класс =).
Не совсем все так просто. Нужно еще и повернуть массив на некоторый угол в зависимости от его рисунка.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
02.07.2017, 23:44
Множите массив векторов на матрицу поворота…чтобы это не значило =))
Тоже что:
“Координаты (x',y') в результате поворота точки (x, y) имеют вид:”
Матрица поворота в 2д.
Знаки зависят от по часовой или против.
Углы в радианах.
https://ru.wikipedia.org/wiki/Матрица_поворота
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.07.2017, 23:44
Помогаю со студенческими работами здесь

Ввести с клавиатуры последовательность из 20 координат точек (x,y) и определить максимальную из ординат точек
помогите кто сможет , завтра надо сдавать ргз а я не понимаю как делать ( если можно с блок схемой) 1.Ввести с клавиатуры...

Известны координаты двух точек. Найти расстояния от начала координат до этих точек.
Известны координаты двух точек A(x1,y1) и B(x2,y2). Найти расстояния от начала координат до этих точек. Не знаю как высчитать...

Программа, осуществляющая ввод координат трех точек на плоскости и выводящая сообщение, какая из них ближе к началу координат
Разработать программу,осуществляющую ввод координаты трех точек на плоскости о выводящее сообщение, какая из них ближе к началу координат.

Записать координаты точек в файл и найти среднее отклонение (расстояние) точек от центра координат
Приняв, что координаты точек на плоскости задают- ся двумя числами x и y, составить программу, которая вводит с клавиатуры координаты...

Среди точек массива, лежащих в некоторой четверти, найти точку, наиболее близкую/удаленную от начала координат
Дан массив из N точек. Среди всех точек этого массива, лежащих в первой1|второй2|третьей3|четвертой4 четверти, найти точку, наиболее...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru