-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrectangle_triangle_generator.py
More file actions
136 lines (115 loc) · 4.6 KB
/
rectangle_triangle_generator.py
File metadata and controls
136 lines (115 loc) · 4.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import numpy as np
def generate_rectangle_triangle_cas(width, height, num_points_outer, num_points_inner, triangle_size):
"""生成带内边界的cas文件,外边界为矩形,内边界为三角形
width: 矩形宽度
height: 矩形高度
num_points_outer: 外边界点数
num_points_inner: 内边界点数(每边)
triangle_size: 三角形边长
"""
def generate_rectangle_points(w, h, n_points):
# 确保每边点数相等(包括角点)
points_per_side = n_points // 4 + 1
# 生成四条边的点
points = []
# 底边(从左到右)
for i in range(points_per_side-1):
x = w * i / (points_per_side-1)
points.append([x, 0.0])
# 右边(从下到上)
for i in range(points_per_side-1):
y = h * i / (points_per_side-1)
points.append([w, y])
# 顶边(从右到左)
for i in range(points_per_side-1):
x = w * (1 - i / (points_per_side-1))
points.append([x, h])
# 左边(从上到下)
for i in range(points_per_side-1):
y = h * (1 - i / (points_per_side-1))
points.append([0.0, y])
return np.array(points)
def generate_triangle_points(size, n_points_per_side, center_x, center_y):
# 计算等边三角形的高
h = size * np.sqrt(3) / 2
# 三角形的三个顶点(相对于中心点)
vertices = np.array([
[center_x, center_y + h/2], # 顶部
[center_x - size/2, center_y - h/2], # 左下
[center_x + size/2, center_y - h/2] # 右下
])
# 生成三条边的点
points = []
for i in range(3):
start = vertices[i]
end = vertices[(i+1)%3]
# 确保每条边上的点数相等
for j in range(n_points_per_side-1):
t = j / (n_points_per_side-1)
x = start[0] * (1-t) + end[0] * t
y = start[1] * (1-t) + end[1] * t
points.append([x, y])
return np.array(points)
# 生成外边界点
outer_points = generate_rectangle_points(width, height, num_points_outer)
# 生成内边界点(三角形)
# 将三角形放在矩形中心,稍微向上偏移以获得更好的视觉效果
center_x = width / 2
center_y = height / 2 + height * 0.1
inner_points = generate_triangle_points(triangle_size, num_points_inner, center_x, center_y)
# 合并所有点
all_points = np.vstack([outer_points, inner_points])
total_points = len(all_points)
# 生成文件内容
content = []
content.extend([
'(1 "Exported from Python Generator")',
'(0 "Generated Rectangle-Triangle Geometry")',
'',
'(0 "Dimension : 2")',
'(2 2)',
'',
f'(0 "Number of Nodes : {total_points}")',
'(10 (0 1 234 0 2))',
'',
f'(0 "Total Number of Faces : {total_points}")',
f'(0 " Boundary Faces : {total_points}")',
'(0 " Interior Faces : 0")',
'(13 (0 1 444 0))',
'',
'(0 "Total Number of Cells : 0")',
'(0 " Tri cells : 0")',
'(0 " Quad cells : 0")',
'(12 (0 1 211 0))',
'',
f'(0 "Zone 1 Number of Nodes : {total_points}")'
])
# 写入节点坐标
for point in all_points:
content.append(f"{point[0]:.6f} {point[1]:.6f}")
content.append('')
# 写入面连接信息
content.append(f'(0 "Zone 2 Number of Face : {total_points}")')
# 外边界面
num_outer = len(outer_points)
for i in range(num_outer):
next_point = (i + 1) % num_outer
content.append(f"{i+1} {next_point+1} 0 -1")
# 内边界面
num_inner = len(inner_points)
for i in range(num_inner):
curr_point = num_outer + i + 1
next_point = num_outer + ((i + 1) % num_inner) + 1
content.append(f"{curr_point} {next_point} -1 0")
# 写入文件
with open('datainput/rectangle_triangle.cas', 'w') as f:
f.write('\n'.join(content))
if __name__ == "__main__":
generate_rectangle_triangle_cas(
width=1.0, # 外边界宽度
height=1.0, # 外边界高度
num_points_outer=40, # 外边界点数
num_points_inner=15, # 内边界每边点数
triangle_size=0.4 # 三角形边长
)
print("已生成带内边界的cas文件到 datainput/rectangle_triangle.cas")