You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Nazca中放置梯形以平滑三叶草晶体的尖角?

解决Nazca三叶草晶体尖角平滑问题

核心思路

要实现三叶草尖角的平滑过渡,关键是让梯形侧边与相邻圆的切线方向保持平行。通过计算每个尖角处两个相邻圆的切线角度,以此角度绘制梯形侧边,就能保证梯形与圆的衔接平滑。

现有代码(参考)

假设你的初始三叶草代码如下:

import nazca as nd

radius = 100
# 三个圆心构成等边三角形
centers = [
    (0, 0),
    (radius*3**0.5, 0),
    (radius*3**0.5/2, radius*1.5)
]

# 绘制三个圆
for (x, y) in centers:
    nd.circle(r=radius, layer=1).put(x, y)

nd.export_plt()

修改后代码(带梯形平滑尖角)

import nazca as nd
import math

radius = 100
trapezoid_width = 20  # 梯形靠近圆的底边宽度
trapezoid_length = 30 # 梯形向外延伸的长度
layer = 1

# 三个圆心坐标
centers = [
    (0, 0),
    (radius*math.sqrt(3), 0),
    (radius*math.sqrt(3)/2, radius*1.5)
]

# 绘制基础三叶草圆
for (x, y) in centers:
    nd.circle(r=radius, layer=layer).put(x, y)

# 三叶草三个尖角的坐标(等边三角形顶点外侧延伸点)
corner_points = [
    (-radius*math.sqrt(3)/2, -radius*0.5),
    (radius*math.sqrt(3)*1.5, -radius*0.5),
    (radius*math.sqrt(3)/2, radius*2)
]

# 每个尖角对应的两个相邻圆心
corner_circle_pairs = [
    (centers[0], centers[1]),
    (centers[1], centers[2]),
    (centers[2], centers[0])
]

# 遍历每个尖角绘制平滑梯形
for corner, (c1, c2) in zip(corner_points, corner_circle_pairs):
    # 计算圆心到尖角的向量角度(即圆在该点的切线垂直方向)
    vec1 = (corner[0] - c1[0], corner[1] - c1[1])
    angle1 = math.atan2(vec1[1], vec1[0])
    vec2 = (corner[0] - c2[0], corner[1] - c2[1])
    angle2 = math.atan2(vec2[1], vec2[0])
    
    # 计算梯形四个顶点坐标
    # 靠近圆的两个端点
    p1 = (
        corner[0] + trapezoid_width/2 * math.cos(angle1 + math.pi/2),
        corner[1] + trapezoid_width/2 * math.sin(angle1 + math.pi/2)
    )
    p2 = (
        corner[0] + trapezoid_width/2 * math.cos(angle2 - math.pi/2),
        corner[1] + trapezoid_width/2 * math.sin(angle2 - math.pi/2)
    )
    # 外侧的两个端点(沿尖角延伸方向)
    ext_angle = (angle1 + angle2) / 2
    p3 = (
        p2[0] + trapezoid_length * math.cos(ext_angle),
        p2[1] + trapezoid_length * math.sin(ext_angle)
    )
    p4 = (
        p1[0] + trapezoid_length * math.cos(ext_angle),
        p1[1] + trapezoid_length * math.sin(ext_angle)
    )
    
    # 绘制梯形多边形
    nd.Polygon(points=[p1, p2, p3, p4], layer=layer).put()

nd.export_plt()

关键说明

  • 尖角坐标定位:基于等边三角形的几何关系,计算出三叶草三个尖角的精准位置,确保梯形放置在正确的端点。
  • 切线角度匹配:通过atan2计算圆心到尖角的向量角度,梯形侧边与该向量垂直(即与圆的切线平行),实现无缝衔接。
  • 参数可调:trapezoid_width和trapezoid_length可根据加工需求修改,灵活控制平滑过渡的尺寸。

内容的提问来源于stack exchange,提问作者wosker4yan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 11:30:58