Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как создать матрицу преобразований на языке У.Д.А.В. то есть на PYTHON

- Ученик (94), открыт 2 недели назад
Мне необходимо создать матрицу преобразований используя только циклы, переменные и условные операторы, Я ЗНАЮ, ЧТО ЭТО СЛОЖНО МУТОРНО И ДОЛГО, НО МНЕ НУЖНО, ЧТОБЫ БЫЛИ ТОЛЬКО ЦИКЛЫ, ПЕРЕМЕННЫЕ, УСЛОВНЫЕ ОПЕРАТОРЫ!!! Без всяких подобных функций и библиотек: без SymPy, matlblib, Len(), huen(), reverse(), huevers() I tak dalee. Если это необходимо то можно использовать модуль math. Мне для координатной плоскости и фигур в ней, чтобы например переместив одну точку и все остальные точки фигуры не изменились относительно неё. То есть обыкновенное перемещение. Например есть квадрат с точками (0,0) (0,1) (1,1) (1,0). Далее я перемещаю первую точку по икс на 5 и все остальные точки автоматически встают на правильные позиции чтобы остался квадрат. А также чтобы матрица преобразования была в 3 мерных координатах... Я слышал тут есть сверхразумы опередившие эволюцию, НЕ ПОДВЕДИТЕ!!!
1 ответ
alex balabanov Знаток (445) 2 недели назад
Понять задачу можно так: нужно создать матрицу преобразования, которая позволяет перемещать фигуры на координатной плоскости (или в 3D-пространстве) с помощью циклов, переменных и условных операторов без использования встроенных функций и библиотек. Я предоставлю вам пример кода на Python, который создаст матрицу преобразования для 2D-координат и использования ее для перемещения квадрата.

### Шаги для решения задачи:
1. Определить начальные координаты вершин квадрата.
2. Создать функцию, которая принимает шаг перемещения и обновляет координаты вершин на основе этой матрицы преобразования.

Вот пример кода:

# Инициализация координат квадрата
square = [
[0, 0, 1], # Вершина (0, 0) в однородных координатах
[0, 1, 1], # Вершина (0, 1) в однородных координатах
[1, 1, 1], # Вершина (1, 1) в однородных координатах
[1, 0, 1] # Вершина (1, 0) в однородных координатах
]

# Функция для перемещения квадрата
def translate_square(square, dx, dy):
# Создадим новый массив для новых координат
new_square = [[0, 0, 0] for _ in range(len(square))]

# Итерация по каждой вершине квадрата
for i in range(len(square)):
# Перемещение по x и y
new_square[i][0] = square[i][0] + dx # Новая координата X
new_square[i][1] = square[i][1] + dy # Новая координата Y
new_square[i][2] = 1 # В однородных координатах Z остается 1

return new_square

# Параметры для перемещения
dx = 5 # Передвижение по оси X
dy = 0 # Передвижение по оси Y

# Перемещение квадрата
new_square = translate_square(square, dx, dy)

# Вывод новых координат
print("Новые координаты квадрата:")
for point in new_square:
print(f"({point[0]}, {point[1]})")


### Объяснение кода:
1. Инициализация квадрата: Координаты вершин квадрата записаны в список square, где каждая вершина представлена в однородных координатах (x, y, 1).
2. Функция translate_square: Она принимает квадрат и значения dx и dy, после чего создает новый массив с новыми координатами, добавляя dx и dy к соответствующим координатам для каждого элемента квадрата.
3. Перемещение: Вызывается функция с параметрами dx и dy, которые задают, на сколько необходимо переместить квадрат.
4. Вывод результатов: Новые координаты отображаются на экране.

### В 3D-пространстве:
Для 3D-пространства вы можете добавить координату Z в тот же принцип, просто расширив два цикла:

# Инициализация координат куба (пример)
cube = [
[0, 0, 0, 1],
[0, 0, 1, 1],
[0, 1, 0, 1],
[0, 1, 1, 1],
[1, 0, 0, 1],
[1, 0, 1, 1],
[1, 1, 0, 1],
[1, 1, 1, 1],
]

def translate_cube(cube, dx, dy, dz):
new_cube = [[0, 0, 0, 0] for _ in range(len(cube))]

for i in range(len(cube)):
new_cube[i][0] = cube[i][0] + dx
new_cube[i][1] = cube[i][1] + dy
new_cube[i][2] = cube[i][2] + dz
new_cube[i][3] = 1

return new_cube


Используйте тот же принцип, что и в 2D, добавляя координату Z и перемещение по ней. Надеюсь, это поможет вам создать матрицу преобразований, которая будет работать так, как вам нужно
-Ученик (94) 2 недели назад
Попробую, спасибо!!!
alex balabanov Знаток (445) Обращайся
Похожие вопросы