extends MeshInstance3D func add_ptah(arr,node,mate = preload("res://line_2.tres")): var vertices = PackedVector3Array() for index in arr.size(): if index >= arr.size() -2: break var a_post:Vector3 = arr[index] var b_post:Vector3 = arr[index + 1] var c_post:Vector3 = arr[index + 2] var a1 = calculate_A2_position(Vector2(a_post.x,a_post.z),Vector2(b_post.x,b_post.z),1) vertices.push_back(a_post ) vertices.push_back(Vector3(a1.x,a_post.y,a1.y)) vertices.push_back(b_post ) var b1 = calculate_A2_position(Vector2(b_post.x,b_post.z),Vector2(c_post.x,c_post.z),1) vertices.push_back(Vector3(b1.x,b_post.y,b1.y)) vertices.push_back(b_post) vertices.push_back(Vector3(a1.x,a_post.y,a1.y)) var a2 = calculate_A2_position(Vector2(a_post.x,a_post.z),Vector2(b_post.x,b_post.z),1,false) vertices.push_back(a_post ) vertices.push_back(Vector3(a2.x,a_post.y,a2.y)) vertices.push_back(b_post ) var b2 = calculate_A2_position(Vector2(b_post.x,b_post.z),Vector2(c_post.x,c_post.z),1,false) vertices.push_back(Vector3(b2.x,b_post.y,b2.y)) vertices.push_back(b_post) vertices.push_back(Vector3(a2.x,a_post.y,a2.y)) # 初始化 ArrayMesh。 var arr_mesh = ArrayMesh.new() var arrays = [] arrays.resize(Mesh.ARRAY_MAX) arrays[Mesh.ARRAY_VERTEX] = vertices # 创建 Mesh。 arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays) node.mesh = arr_mesh node.mesh.surface_set_material(0,mate) pass func calculate_A2_position(A1: Vector2, B1: Vector2, distance_to_A2: float,r = true) -> Vector2: var m_l2 = (B1.y - A1.y) / (B1.x - A1.x) # 计算m_l2 (B1 和 A1之间的斜率) var m_l1 = -1 / m_l2 # 计算m_l1 (垂直线的斜率) var dx = distance_to_A2 / sqrt(1 + pow(m_l1, 2)) # 计算 dx 和 dy var dy = m_l1 * dx # 计算 A2 的位置 (有两个可能的解) var A2_1 = Vector2(A1.x + dx, A1.y + dy) var A2_2 = Vector2(A1.x - dx, A1.y - dy) var direction_to_b1 = (B1 - A1).normalized() if r: if direction_to_b1.cross(A2_1 - A1) > 0: return A2_1 else: return A2_2 else: if direction_to_b1.cross(A2_1 - A1) < 0: return A2_1 else: return A2_2