# 生成一维与二维网格之间的连接 本教程介绍使用 `meshkernel` 生成网格连接的基本方法。 [返回示例目录](index.md) 以下保留原笔记本的代码和已保存输出;转换过程中未重新执行代码。 ```python from meshkernel import MakeGridParameters, Mesh1d, Mesh2d, MeshKernel, GeometryList from meshkernel.version import __version__ __version__ ``` ```text '7.0.4' ``` 导入其他所需的库。 ```python import numpy as np from pathlib import Path import matplotlib.pyplot as plt ``` ```python def plot_mesh_and_contacts(mesh1d_output_0, mesh2d_output_0, contacts_output_0=None): fig, ax = plt.subplots() mesh1d_output_0.plot_edges(ax, color="blue") mesh2d_output_0.plot_edges(ax, color="black") if contacts_output_0: contacts_output_0.plot_edges(ax, mesh1d_output_0, mesh2d_output_0, color="red") ax.plot( mesh1d_output_0.node_x, mesh1d_output_0.node_y, "o", color="blue", markersize=5 ) plt.show() ``` # 设置二维网格和一维网格 ```python # 创建基础网格 mk = MeshKernel() make_grid_parameters = MakeGridParameters( angle=0, origin_x=0.0, origin_y=0.0, upper_right_x=100.0, upper_right_y=100.0, block_size_x=10.0, block_size_y=10.0, ) mk.curvilinear_compute_rectangular_grid_on_extension(make_grid_parameters) mk.curvilinear_convert_to_mesh2d() mesh1d_node_x = [0.0, 50.0, 100.0] mesh1d_node_y = [20.0, 20.0, 20.0] mesh1d_edge_nodes = [0, 1, 1, 2] mesh1d = Mesh1d( node_x=mesh1d_node_x, node_y=mesh1d_node_y, edge_nodes=mesh1d_edge_nodes ) mk.mesh1d_set(mesh1d) ``` ```python mesh1d_output_0 = mk.mesh1d_get() mesh2d_output_0 = mk.mesh2d_get() contacts_output_0 = mk.contacts_get() plot_mesh_and_contacts(mesh1d_output_0, mesh2d_output_0, contacts_output_0) ``` ![单元格 7 的绘图输出](images/14_contacts_generation_7_0.png) ## 计算连接 ```python node_mask = np.full(mesh1d.node_x.size, True) ``` #### 计算多重连接 ```python mk.contacts_compute_multiple(node_mask) mesh1d_output_0 = mk.mesh1d_get() mesh2d_output_0 = mk.mesh2d_get() contacts_output_0 = mk.contacts_get() plot_mesh_and_contacts(mesh1d_output_0, mesh2d_output_0, contacts_output_0) ``` ![单元格 11 的绘图输出](images/14_contacts_generation_11_0.png) #### 计算单一连接 ```python x_coordinates = np.array([0.0, 100.0, 100.0, 0.0, 0.0], dtype=np.double) y_coordinates = np.array([0.0, 0.0, 100.0, 100.0, 0.0], dtype=np.double) area_selection = GeometryList(x_coordinates, y_coordinates) mk.contacts_compute_single(node_mask, area_selection, projection_factor=0.0) mesh1d_output_0 = mk.mesh1d_get() mesh2d_output_0 = mk.mesh2d_get() contacts_output_0 = mk.contacts_get() plot_mesh_and_contacts(mesh1d_output_0, mesh2d_output_0, contacts_output_0) ``` ![单元格 13 的绘图输出](images/14_contacts_generation_13_0.png) #### 根据指定点计算连接 ```python x_coordinates = np.array([10.000001], dtype=np.double) y_coordinates = np.array([5.0], dtype=np.double) point_cloud = GeometryList(x_coordinates, y_coordinates) mk.contacts_compute_with_points(node_mask, point_cloud) mesh1d_output_0 = mk.mesh1d_get() mesh2d_output_0 = mk.mesh2d_get() contacts_output_0 = mk.contacts_get() plot_mesh_and_contacts(mesh1d_output_0, mesh2d_output_0, contacts_output_0) ``` ![单元格 15 的绘图输出](images/14_contacts_generation_15_0.png) ### 计算边界连接 ```python mk.contacts_compute_boundary(node_mask, search_radius=50.0) mesh1d_output_0 = mk.mesh1d_get() mesh2d_output_0 = mk.mesh2d_get() contacts_output_0 = mk.contacts_get() plot_mesh_and_contacts(mesh1d_output_0, mesh2d_output_0, contacts_output_0) ``` ![单元格 17 的绘图输出](images/14_contacts_generation_17_0.png)