本文的目的是介绍Pythonmayavi:如何在3D空间中的随机位置绘制球体的详细情况,特别关注pythonmayavi三维绘图的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个
本文的目的是介绍Python mayavi:如何在3D空间中的随机位置绘制球体的详细情况,特别关注python mayavi三维绘图的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解Python mayavi:如何在3D空间中的随机位置绘制球体的机会,同时也不会遗漏关于3D空间中点的旋转、android – 如何从屏幕确定3D空间中的触摸内容?、JavaScript中的div的随机位置、Matplotlib:如何在3D图形中绘制垂直平面的知识。
本文目录一览:- Python mayavi:如何在3D空间中的随机位置绘制球体(python mayavi三维绘图)
- 3D空间中点的旋转
- android – 如何从屏幕确定3D空间中的触摸内容?
- JavaScript中的div的随机位置
- Matplotlib:如何在3D图形中绘制垂直平面
Python mayavi:如何在3D空间中的随机位置绘制球体(python mayavi三维绘图)
根据球面方程:
因此,当将参数传递给mlab.mesh
时,我们希望为每个球体设置[x_0,y_0,z_0]
,例如它们位于与轴不同的位置。
问题是np.random.rand(4)
生成的数字是随机的,但不是唯一的。
让我们进行修改,以使参数[x_0,z_0]
是随机且不同的:
- 我们使用
sample
来获取多维数据集中不同的索引号 - 我们使用
index_to_3d
索引将其转换为(x,y,z)
坐标
可以调整半径r
,以使球体之间的间隔更大或更小。
3D空间的球体
代码:
import random
from itertools import product
from mayavi import mlab
import numpy as np
[phi,theta] = np.mgrid[0:2 * np.pi:12j,0:np.pi:12j]
x = np.cos(phi) * np.sin(theta)
y = np.sin(phi) * np.sin(theta)
z = np.cos(theta)
def plot_sphere(x_0,z_0):
r = 0.5
return mlab.mesh(r * x + x_0,r * y + y_0,r * z + z_0)
SPHERES_NUMBER = 200
CUBE_SIZE = 10
def index_to_3d(i,SIZE):
z = i // (SIZE * SIZE)
i -= (z * SIZE * SIZE)
y = i // SIZE
x = i % SIZE
return x,z
random_tuples = [index_to_3d(i,CUBE_SIZE) for i in random.sample(range(CUBE_SIZE ** 3),SPHERES_NUMBER)]
for k in range(SPHERES_NUMBER):
x_0,z_0 = random_tuples[k]
plot_sphere(x_0,z_0)
mlab.show()
输出:
Spheres集群
让我们利用gauss
为聚类点创建坐标。
代码:
import random
from itertools import product
from mayavi import mlab
import numpy as np
[phi,r * z + z_0)
SPHERES_NUMBER = 200
def create_cluster(CLUSTER_SIZE):
means_and_deviations = [(1,1.5),(1,1.5)]
def generate_point(means_and_deviations):
return tuple(random.gauss(mean,deviation) for mean,deviation in means_and_deviations)
cluster_points = set()
while len(cluster_points) < CLUSTER_SIZE:
cluster_points.add(generate_point(means_and_deviations))
return list(cluster_points)
cluster_points = create_cluster(SPHERES_NUMBER)
for k in range(SPHERES_NUMBER):
x_0,z_0 = cluster_points[k]
plot_sphere(x_0,z_0)
mlab.show()
输出:
3D空间中点的旋转
我有一个与3D空间中的点旋转有关的问题。
假设我有一个具有X,Y和Z坐标的点。
现在,我想通过以下三种方式之一指定旋转角度:
- 按用户定义的程度
- 通过用户定义的旋转轴
- 围绕(相对于)用户定义的点
我在这里找到了很好的链接,但是没有指向第3点。有人可以帮我解决这个问题吗?
答案1
小编典典所有旋转将绕原点旋转。因此,您可以平移到原点,旋转,然后平移回去。
T = translate from global coordinates to user-coordinatesR = rotate around the origin (like in your link)(T^-1) = translate backpoint XX_rotated = (T^-1)*R*T*X
如果要旋转多个点,则将矩阵相乘:
A = (T^-1)*R*TX_rotated = A*X
android – 如何从屏幕确定3D空间中的触摸内容?
我的理解是触摸事件导致一条线,我必须找到它与之相交的第一个“东西”.
有没有关于如何做到这一点的教程?
解决方法
射线 – 物体交叉是一种可行的方式.蒂姆斯姆斯的回答已经涵盖了其中的一部分,但还有更多.想法是从2D坐标创建射线到3D.为此需要视图矩阵和投影矩阵的逆.一旦你有射线,你可以使用你选择的射线相交测试,当然你需要选择最接近的对象,如Timmmm的点4.边界球和边界框很容易实现,互联网上有很多交叉测试教程.
This picking tutorial适用于DirectX,但您可能会理解.射线构造部分是最重要的.
编辑
Android实现了它自己的gluUnproject版本.它可用于创建射线,通过调用近距离和远距离平面(0和1)并从远距离平面结果中减去近平面结果来获得射线的方向. Ray起源是视图位置.更多here.
JavaScript中的div的随机位置
var currentDivPosition = myDiv.offset(),myDivWidth = myDiv.width(),myDivHeight = myDiv.height(),var myDiv = $('<div>'),finalDivPositionTop,finalDivPositionLeft; myDiv.attr({ id: 'myDivId',class: 'myDivClass' }); // already defined with position: absolute is CSS file. // Set new position finalDivPositionTop = currentDivPosition.top + Math.floor( Math.random() * 100 ); finalDivPositionLeft = currentDivPosition.left + Math.floor( Math.random() * 100 ); myDiv.css({ // Set div position top: finalDivPositionTop,left: finalDivPositionLeft }); $('body').append(myDiv); myDiv.text('My position is: ' + finalDivPositionTop + ',' + finalDivPositionLeft); myDiv.fadeIn(500); setTimeout(function(){ myDiv.fadeOut(500); myDiv.remove(); },3000);
解决方法
(function makeDiv(){ // vary size for fun var divsize = ((Math.random()*100) + 50).toFixed(); var color = '#'+ Math.round(0xffffff * Math.random()).toString(16); $newdiv = $('<div/>').css({ 'width':divsize+'px','height':divsize+'px','background-color': color }); // make position sensitive to size and document's width var posx = (Math.random() * ($(document).width() - divsize)).toFixed(); var posy = (Math.random() * ($(document).height() - divsize)).toFixed(); $newdiv.css({ 'position':'absolute','left':posx+'px','top':posy+'px','display':'none' }).appendTo( 'body' ).fadeIn(100).delay(1000).fadeOut(500,function(){ $(this).remove(); makeDiv(); }); })();@H_301_3@编辑:为了乐趣,添加了一个随机的颜色. @H_301_3@编辑:添加.remove(),所以我们不用旧的div污染页面. @H_301_3@示例:http://jsfiddle.net/redler/QcUPk/8/
Matplotlib:如何在3D图形中绘制垂直平面
我想画一个由
5 = x + y
在3D图形中,使用Matplotlib。
我看了一眼这个和这个,但没有机会。我还发现mpl_toolkits.mplot3d.art3d.line_2d_to_3d
,在这个环节,它说
将2D线转换为3D
看起来对我很有前途,但我不知道如何使用它。
现在,您将如何修改以下代码以实现我的目标?
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
xs = np.linspace(0,10,100)
ys = np.linspace(0,100)
X,Y = np.meshgrid(xs,ys)
Z # ?????????
fig = plt.figure()
ax = fig.add_subplot(111,projection='3d')
ax.plot_surface(X,Y,Z)
plt.show()
感谢您的帮助。
关于Python mayavi:如何在3D空间中的随机位置绘制球体和python mayavi三维绘图的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于3D空间中点的旋转、android – 如何从屏幕确定3D空间中的触摸内容?、JavaScript中的div的随机位置、Matplotlib:如何在3D图形中绘制垂直平面的相关知识,请在本站寻找。
本文标签: