LargeScreen/scripts/csg_mesh_3d.gd
2025-01-13 14:39:58 +08:00

44 lines
3.7 KiB
GDScript

@tool
extends Node3D
@export var a = false:
set(value):
var arr = [Vector3(428.2168, 8.623453, -227.8385), Vector3(428.1051, 8.6564, -229.2604), Vector3(426.622, 8.9364, -242.6571), Vector3(426.0689, 9.0102, -246.3827), Vector3(426.0144, 9.0102, -246.7882), Vector3(425.964, 9.0102, -247.249), Vector3(425.9302, 9.0102, -247.684), Vector3(425.9099, 9.0102, -248.1199), Vector3(425.9033, 9.0102, -248.5564), Vector3(425.9103, 9.0102, -248.993), Vector3(425.9309, 9.0102, -249.4293), Vector3(425.9652, 9.0102, -249.8648), Vector3(426.0131, 9.0102, -250.2991), Vector3(426.0745, 9.0102, -250.7319), Vector3(426.1495, 9.0102, -251.1626), Vector3(426.2379, 9.0102, -251.5909), Vector3(426.3396, 9.0102, -252.0163), Vector3(426.4546, 9.0102, -252.4385), Vector3(426.5828, 9.0102, -252.857), Vector3(426.7241, 9.0102, -253.2713), Vector3(426.8783, 9.0102, -253.6812), Vector3(427.0452, 9.0102, -254.0861), Vector3(427.2247, 9.0102, -254.4857), Vector3(427.4168, 9.0102, -254.8796), Vector3(427.621, 9.0102, -255.2674), Vector3(427.8374, 9.0102, -255.6488), Vector3(428.0656, 9.0102, -256.0233), Vector3(428.3054, 9.0102, -256.3906), Vector3(428.5567, 9.0102, -256.7503), Vector3(428.8192, 9.0102, -257.102), Vector3(429.0926, 9.0102, -257.4455), Vector3(429.3766, 9.0102, -257.7804), Vector3(429.6711, 9.0102, -258.1063), Vector3(429.9757, 9.0102, -258.4229), Vector3(430.2901, 9.0102, -258.7299), Vector3(430.614, 9.0102, -259.027), Vector3(430.9472, 9.0102, -259.314), Vector3(431.2892, 9.0102, -259.5904), Vector3(431.6398, 9.0102, -259.8561), Vector3(431.9986, 9.0102, -260.1108), Vector3(432.3653, 9.0102, -260.3542), Vector3(432.7395, 9.0102, -260.5861), Vector3(433.1209, 9.0102, -260.8063), Vector3(433.509, 9.0102, -261.0145), Vector3(433.9036, 9.0102, -261.2105), Vector3(434.3042, 9.0102, -261.3941), Vector3(434.7104, 9.0102, -261.5651), Vector3(435.122, 9.0102, -261.7235), Vector3(435.5383, 9.0102, -261.8689), Vector3(435.9591, 9.0102, -262.0013), Vector3(436.384, 9.0102, -262.1205), Vector3(436.8124, 9.0102, -262.2263), Vector3(437.2441, 9.0102, -262.3188), Vector3(437.6786, 9.0102, -262.3978), Vector3(438.1397, 9.0102, -262.4664), Vector3(441.5602, 9.6755, -262.7914), Vector3(471.8963, 10.5332, -265.4572), Vector3(508.307, 11.5039, -268.558), Vector3(550.8515, 12.7924, -272.3389), Vector3(570.2333, 13.32565, -274.1788)]
add_ptah(arr,$CSGMesh3D)
func add_ptah(arr,node):
var vertices = PackedVector3Array()
for index in arr.size():
if index >= arr.size() -1: break
var a_post:Vector3 = arr[index]
var b_post:Vector3 = arr[index + 1]
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(a_post.x,a_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))
# 初始化 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
pass
func calculate_A2_position(A1: Vector2, B1: Vector2, distance_to_A2: float) -> 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)
# 你可以根据实际情况返回其中一个解
return A2_1 # 此处默认返回第一个解 A2_1