Генерация 3D синусоидальной кривой с использованием python

#python #numpy

#python #numpy

Вопрос:

Я хочу сгенерировать 3D-синусоидальную кривую на python. Поддерживает ли это lumpy или есть другая библиотека, которую я могу использовать для этого?

Генерация 2D-кривой проста примерно так —

 x = numpy.linspace(0, 20, 0.1)
y = numpy.sin(x)
  

Теперь у меня есть x и y, которые я могу сохранить на диск.

Теперь я хочу сделать что-то подобное, но для 3D-синусоидальной кривой по осям x, y и z. Я надеюсь, что кто-то мог сделать это раньше и помочь мне.

РЕДАКТИРОВАТЬ: я понял, что для моего варианта использования мне нужна 2D-кривая в 3D-пространстве. Таким образом, другие оси могут быть постоянными. Итак, я просто генерирую 2D-кривую и добавляю постоянное значение третьего параметра, чтобы получить значения x, y, z.

Комментарии:

1. Я не знаю об обобщении синусоидальной функции на более чем одномерный ввод — не могли бы вы сослаться на определение такой функции? Если ее нет, то как именно выглядит 3D-синусоидальная кривая? Я предполагаю x , что это независимо, как указано выше, и y = sin(x) . Что z тогда?

2. Тбх, я сам не знаю. Я представляю синусоидальную кривую, случайно брошенную в 3D-пространство. Тогда кривая не будет выровнена по какой-либо одной оси, а будет иметь случайную ориентацию. Он будет иметь значения x, y и z в любой заданной точке. Я не знаю, как это представить, и надеюсь, что кто-то знает.

3. Синусоидальная кривая, случайно расположенная в 3D-пространстве, может быть представлена как синус, умноженный на 4d однородное вращение. 3d-приложения используют такие матрицы. Если у вас есть дискретизированный сигнал синуса, умножьте каждую точку на эту матрицу вращения-преобразования.

4. это требует некоторого разъяснения. Приведенный вами пример является одномерным (не двухмерным): y является функцией одной переменной x. Вы хотите, чтобы z было функцией (x, y), или вы хотите, чтобы f_value = f(x,y, z)?

5. Вам нужна кривая в 3D, например: matplotlib.org/gallery/mplot3d /… ?

Ответ №1:

Вы можете попробовать что-то вроде:

 import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
x = np.arange(0, 20, 0.1)
y = np.sin(x)
z = y*np.sin(x)

fig = plt.figure()
ax = plt.axes(projection='3d')

c = x   y

ax.scatter(x, y, z, c=c)
  

или, может быть, вы хотите z = x*np.sin(x) или даже z = np.sin(y)

Редактировать: возможно, это лучшее решение z = np.sin(np.sqrt(x**2 y**2)) отсюда

Поиграйте и найдите то, что вы хотите. Довольно забавный материал и зависит от того, какой именно результат вы ищете.