【Python】生成三维金字塔坐标

给定层数生成三维金字塔坐标

可以与 算法2 做对比,选择更适合的
当前算法采取理性的思维,做什么事之前,都先做好准备,这样,不管到哪,都能有计划地操作

  • count是层数,per_length是两个点之间的距离,即单位长度
# -*- coding:utf-8 -*-
# @FileName :金字塔.py
# @DateTime :2022/4/7 21:55
# @Author   :wanglb
count = 4  # 层数
per_length = 1  # 单位长度

each_side = [each * 2 + 1 for each in range(count)]
each_count = [each ** 2 for each in each_side]
all_count = sum(each_count)
over_count = []
for each in each_count:
    if over_count:
        over_count.append(over_count[-1] + each)
    else:
        over_count.append(each)
# 1, 3, 5, 7, 9
print(f'每层的边长为{each_side}')
print(f'每层的个数 {each_count}')
print(f'总数为 {all_count}')
print(f'截止到当前层数,上面总个数 {over_count}')
for each in range(all_count):
    large = [e for e in over_count if e > each]
    floor = over_count.index(large[0])  # 第几层
    this_count = each - large[0] + each_count[floor]   # 当前层第几个
    this_side = each_side[floor]    # 当前层的边数
    print(f'{floor}{this_count}', end='\t')
    # 左下角到左上角,向右依次填充
    x = this_count // this_side
    y = this_count % this_side
    if floor > 0:
        # 把填充完的平移到中心位置
        x -= floor
        y -= floor
    z = -floor
    # 承伤对应的每段长度
    x *= per_length
    y *= per_length
    z *= per_length
    print(x, y, z)

解读

  • 金字塔的每一层都是正方形,边长第一层是1,第二层是3,第三层是5,一次类推,为连续奇数,即each_side
  • 每层的点个数分别为 1^2, 3^2, 5^2 ...,即each_count
  • 截止当前层,上面点的个数为 1, 1+9, 1+9+25 ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wanglb465

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值