return rotated_point[0][0], rotated_point[1][0], rotated_point[2][0]
# Пример использования
point = (1, 0, 0) # Координаты точки (x, y, z)
angle = 90 # Угол в градусах
rotated_point = rotate_point(point, angle)
print("Координаты вращенной точки:", rotated_point)
```
Этот код вращает точку `point` вокруг оси Z на заданный угол `angle`.
– Мы используем функцию `rotate_point`, которая принимает координаты точки и угол вращения.
– Угол преобразуется в радианы.
– Затем создается матрица поворота для оси Z.
– Координаты точки преобразуются в вектор-столбец.
– Мы выполняем умножение матрицы поворота на вектор точки.
– Результатом являются координаты вращенной точки, которые выводятся на экран.
Для вращения точек вокруг других осей или для сложных операций вращения можно использовать аналогичный подход, но с другими матрицами поворота.
13. Задача о максимальной подпоследовательности: Найти наибольшую невозрастающую подпоследовательность в списке чисел.
Для решения задачи о поиске наибольшей невозрастающей подпоследовательности в списке чисел мы можем воспользоваться динамическим программированием.
Вот примерный алгоритм решения:
1. Создаем список длиной равной исходному списку чисел, заполненный единицами. Этот список будет содержать длины наибольших невозрастающих подпоследовательностей, заканчивающихся в каждом элементе исходного списка.
2. Проходим по каждому элементу исходного списка и сравниваем его со всеми предыдущими элементами.
3. Если текущий элемент больше или равен предыдущему, длина наибольшей невозрастающей подпоследовательности, заканчивающейся в текущем элементе, будет равна максимальной длине подпоследовательности, заканчивающейся в предыдущем элементе, плюс 1.
4. В конце алгоритма находим максимальное значение в списке длин и восстанавливаем саму подпоследовательность.
Пример кода на Python:
```python
def find_max_non_increasing_subsequence(nums):
n = len(nums)
# Создаем список для хранения длин наибольших невозрастающих подпоследовательностей
lengths = [1] * n
# Заполняем список длин
for i in range(1, n):
for j in range(i):
if nums[i] <= nums[j]:
lengths[i] = max(lengths[i], lengths[j] + 1)
# Находим максимальную длину подпоследовательности
max_length = max(lengths)
# Восстанавливаем саму подпоследовательность
subsequence = []
last_index = lengths.index(max_length)
subsequence.append(nums[last_index])
for i in range(last_index – 1, -1, -1):
if nums[i] >= nums[last_index] and lengths[i] == max_length – 1:
subsequence.append(nums[i])
max_length -= 1
last_index = i
return subsequence[::-1] # Возвращаем подпоследовательность в обратном порядке
# Пример использования
nums = [5, 3, 8, 2, 9, 1, 6]
result = find_max_non_increasing_subsequence(nums)
print("Наибольшая невозрастающая подпоследовательность:", result)
```