学习笔记一

一、使用proj4将地理经纬度转换为网格坐标,您可以使用以下代码:

import pyproj

def convert_coordinates(lat, lon):
    source_crs = pyproj.CRS("EPSG:4326")
    target_crs = pyproj.CRS("EPSG:32650")
    transformer = pyproj.Transformer.from_crs(source_crs, target_crs, always_xy=True)
    x, y = transformer.transform(lon, lat)
    return x, y

# 示例使用:
latitude = 40.7128
longitude = -74.0060
x, y = convert_coordinates(latitude, longitude)
print(f"网格坐标: x={x}, y={y}")

二、tvtk学习笔记参考

python 科学计算三维可视化笔记(第一周 基础运用)_python三维数据-CSDN博客

三、用vtk将包含xyz坐标和浓度的体数据进行三维可视化

  1. 导入所需的vtk模块和数据集。
  2. 创建vtkStructuredPoints或vtkImageData对象,并设置其网格尺寸和数据类型。
  3. 创建vtkPointData对象,并将xyz坐标和浓度数据添加到其中。
  4. 创建vtkColorTransferFunction对象,并定义颜色映射关系。
  5. 创建vtkVolumeProperty对象,并设置体数据的透明度、光照和渲染模式等属性。
  6. 创建vtkVolume对象,并将vtkStructuredPoints或vtkImageData、vtkVolumeProperty和vtkColorTransferFunction对象添加到其中。
  7. 创建vtkRenderer和vtkRenderWindow对象,并将vtkVolume对象添加到vtkRenderer中。
  8. 设置vtkRenderWindow为窗口的渲染窗口,并执行渲染操作。

示例代码:

import vtk

# 创建vtkStructuredPoints数据集
structured_points = vtk.vtkStructuredPoints()
structured_points.SetDimensions(nx, ny, nz)  # 设置网格尺寸
structured_points.SetOrigin(origin_x, origin_y, origin_z)  # 设置原点坐标
structured_points.SetSpacing(delta_x, delta_y, delta_z)  # 设置间距

# 创建vtkPointData对象,并添加xyz坐标和浓度数据
point_data = vtk.vtkPointData()
structured_points.SetPointData(point_data)
coords_array = vtk.vtkDoubleArray()
coords_array.SetNumberOfComponents(3)
coords_array.SetName("Coordinates")
coords_array.SetVoidArray(coords, 3 * num_points, 1)
point_data.SetCoordinates(coords_array)

concentration_array = vtk.vtkDoubleArray()
concentration_array.SetNumberOfComponents(1)
concentration_array.SetName("Concentration")
concentration_array.SetVoidArray(concentration, num_points, 1)
point_data.SetScalars(concentration_array)

# 创建颜色映射
color_transfer = vtk.vtkColorTransferFunction()
color_transfer.AddRGBPoint(min_concentration, r, g, b)
color_transfer.AddRGBPoint(max_concentration, r, g, b)

# 创建体数据属性
volume_property = vtk.vtkVolumeProperty()
volume_property.SetColor(color_transfer)
volume_property.SetScalarOpacity(opacity_transfer)
volume_property.ShadeOn()

# 创建vtkVolume
volume_mapper = vtk.vtkGPUVolumeRayCastMapper()  # 或者使用vtkSmartVolumeMapper
volume_mapper.SetInputDataObject(structured_points)
volume = vtk.vtkVolume()
volume.SetMapper(volume_mapper)
volume.SetProperty(volume_property)

# 创建渲染器和窗口
renderer = vtk.vtkRenderer()
renderer.AddVolume(volume)

render_window = vtk.vtkRenderWindow()
render_window.AddRenderer(renderer)

# 设置渲染窗口并执行渲染操作
render_window_interactor = vtk.vtkRenderWindowInteractor()
render_window_interactor.SetRenderWindow(render_window)
render_window.Render()

render_window_interactor.Start()

 四、使用vtkNetCDFReader类来读取并可视化netcdf文件

import vtk

# 创建一个vtkNetCDFReader对象
reader = vtk.vtkNetCDFReader()
reader.SetFileName("your_file_path.nc")

# 设置读取的变量
reader.GetOutput().GetPointData().SetActiveAttribute("your_variable_name", vtk.vtkDataSetAttributes.SCALARS)

# 创建一个vtkContourFilter对象来提取等值面
contour = vtk.vtkContourFilter()
contour.SetInputConnection(reader.GetOutputPort())
contour.SetValue(0, 0.5)  # 设置等值面的值

# 创建一个vtkPolyDataMapper对象来将数据映射到图形对象
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(contour.GetOutputPort())

# 创建一个vtkActor对象来表示图形对象
actor = vtk.vtkActor()
actor.SetMapper(mapper)

# 创建一个vtkRenderer对象来渲染图形对象
renderer = vtk.vtkRenderer()
renderer.AddActor(actor)

# 创建一个vtkRenderWindow对象来显示渲染结果
render_window = vtk.vtkRenderWindow()
render_window.AddRenderer(renderer)

# 创建一个vtkRenderWindowInteractor对象来与用户交互
interactor = vtk.vtkRenderWindowInteractor()
interactor.SetRenderWindow(render_window)

# 开始渲染和交互
interactor.Initialize()
render_window.Render()
interactor.Start()

五、

六、『python笔记』numpy中mgrid的用法_np.mgrid-CSDN博客

七、提取等值面之vtkContourFilter算法和vtkMarchingCubes算法

vtkContourFilter算法和vtkMarchingCubes算法是常用于三维可视化和体积渲染的算法。它们都用于从体数据中提取等值面。

vtkContourFilter算法使用线性插值的方法,通过将体数据中的标量值与指定的等值进行比较,生成等值面。该算法使用了一个线性插值表,将等值面与单元间的交点进行插值计算,从而生成平滑的等值面。

vtkMarchingCubes算法是一种更高级的等值面提取算法。它使用了空间分割树(Octree)来提高算法的效率,并且可以在提取等值面时保持边界的较高分辨率。该算法通过将体数据划分为小的单元格,并根据这些单元格内部的标量值来确定等值面的位置和形状。需注意,该算法的输入数据必须是ImageData数据类型

# MarchingCube算法提取等值面
iso = vtk.vtkMarchingCubes()
iso.SetInputData(grid)
iso.ComputeNormalsOn()

# ContourFilter算法提取等值面
contour = vtk.vtkContourFilter()
contour.SetInputData(grid)
contour.GenerateValues(10,100,1000)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值