GVKun编程网logo

Python mayavi:如何在3D空间中的随机位置绘制球体(python mayavi三维绘图)

29

本文的目的是介绍Pythonmayavi:如何在3D空间中的随机位置绘制球体的详细情况,特别关注pythonmayavi三维绘图的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个

本文的目的是介绍Python mayavi:如何在3D空间中的随机位置绘制球体的详细情况,特别关注python mayavi三维绘图的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解Python mayavi:如何在3D空间中的随机位置绘制球体的机会,同时也不会遗漏关于3D空间中点的旋转、android – 如何从屏幕确定3D空间中的触摸内容?、JavaScript中的div的随机位置、Matplotlib:如何在3D图形中绘制垂直平面的知识。

本文目录一览:

Python mayavi:如何在3D空间中的随机位置绘制球体(python mayavi三维绘图)

Python mayavi:如何在3D空间中的随机位置绘制球体(python mayavi三维绘图)

根据球面方程:

enter image description here

因此,当将参数传递给mlab.mesh时,我们希望为每个球体设置[x_0,y_0,z_0],例如它们位于与轴不同的位置。

问题是np.random.rand(4)生成的数字是随机的,但不是唯一的。

让我们进行修改,以使参数[x_0,z_0]是随机且不同的:

  1. 我们使用sample来获取多维数据集中不同的索引号
  2. 我们使用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()

输出:

enter image description here

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()

输出:

enter image description here

3D空间中点的旋转

3D空间中点的旋转

我有一个与3D空间中的点旋转有关的问题。

假设我有一个具有X,Y和Z坐标的点。

现在,我想通过以下三种方式之一指定旋转角度:

  1. 按用户定义的程度
  2. 通过用户定义的旋转轴
  3. 围绕(相对于)用户定义的点

我在这里找到了很好的链接,但是没有指向第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空间中的触摸内容?

android – 如何从屏幕确定3D空间中的触摸内容?

如何在我的OpenGL ES 1.1 android应用程序中使用gl.gluUnproject来确定用户触摸屏幕时选择的内容?

我的理解是触摸事件导致一条线,我必须找到它与之相交的第一个“东西”.

有没有关于如何做到这一点的教程?

解决方法

如果您正在进行2D到3D拾取,则需要稍微调整矩阵和向量. OpenGL ES 1.1不存在glunproject,所以你必须自己做一些数学运算.

射线 – 物体交叉是一种可行的方式.蒂姆斯姆斯的回答已经涵盖了其中的一部分,但还有更多.想法是从2D坐标创建射线到3D.为此需要视图矩阵和投影矩阵的逆.一旦你有射线,你可以使用你选择的射线相交测试,当然你需要选择最接近的对象,如Timmmm的点4.边界球和边界框很容易实现,互联网上有很多交叉测试教程.

This picking tutorial适用于DirectX,但您可能会理解.射线构造部分是最重要的.

编辑
Android实现了它自己的gluUnproject版本.它可用于创建射线,通过调用近距离和远距离平面(0和1)并从远距离平面结果中减去近平面结果来获得射线的方向. Ray起源是视图位置.更多here.

JavaScript中的div的随机位置

JavaScript中的div的随机位置

我试图让Divs随机出现在带有 javascript的网页上.所以一个div出现然后消失,然后另一个div出现在页面上的其他地方,然后消失,然后另一个div再次出现在页面上的另一个随机位置,等等. @H_301_2@我不知道如何生成随机单位的像素或使用什么技术来生成随机位置. @H_301_3@我怎么做?这是我的代码:

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);

解决方法

这是一种方法.我随机地将div的大小在一个固定的范围内变化,然后设置位置,使对象总是放置在当前窗口边界内.
(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图形中绘制垂直平面

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图形中绘制垂直平面的相关知识,请在本站寻找。

本文标签: