优化:Dynamo根据构件坐标XY值排序

Hello 大家好!我是九哥~

前一阵群里有个小伙伴咨询如何按 XY 坐标给桩编码,当时呢也没过多思考,就把常规的逻辑告诉他了,利用 Dynamo 自带的 List.SortByKey 节点,根据族放置坐标的 XY 值进行两次排序,就能实现这个需求,于是就简单写了个程序扔到了群里。

不过正好最近自己有个类似的需求,发现这个方法逻辑上虽然通,但是用起来并不完美,总有个别位置编码错误。

反复查看了编号错误的族,发现是因为族的坐标不论是 X 值还是 Y 值,是有一定偏差的,但是当按 XY 分别排序以后,这细小的偏差就会影响构件的编码顺序。

如果遇到个别族偏移距离过大了,而我又想让这个族按照相对的顺序去编码该怎么办呢?(如下图:)

没办法,只能自己重新写下程序了。

本来想简单的连几个节点,发现还没没搞定,没办法只能寄希望于代码了,但是如果用代码,这个事反而就简单了,因为我们在学 Python 的时候,最基本的一个 “冒泡法” 相信大家都会,就是经常用来处理排序问题的,简单套用下 ,就能搞定这个问题。

通过冒泡法,写一个自定义函数,如下:

def zuobiaopaixu(a):
  b=[]
  l=len(a)
  for i in range(l):
    j=i
    for j in range(l):
      if ((a[j].Location).X - (a[i].Location).X) >1000:
        a[i],a[j]=a[j],a[i]
      if ((a[i].Location).Y - (a[j].Location).Y) >1000:
        a[i],a[j]=a[j],a[i]
  for k in range(len(a)):
    b.append(a[k])
  return b

上面这个函数,我们先解决了简单的按坐标排序问题,而且给了一个误差值。然后如果我们想要控制从上到下还是从左到右呢,可以对自定义函数进行优化,如下:

def zuobiaopaixu(a,x,y,D):
  b=[]
  l=len(a)
  for i in range(l):
    j=i
    for j in range(l):
      if x == True:
        if ((a[j].Location).X - (a[i].Location).X) > D:
          a[i],a[j]=a[j],a[i]
      if x == False:
        if ((a[i].Location).X - (a[j].Location).X) > D:
          a[i],a[j]=a[j],a[i]
      if y == True:
        if ((a[i].Location).Y - (a[j].Location).Y) > D:
          a[i],a[j]=a[j],a[i]
      if y == False:
        if ((a[j].Location).Y - (a[i].Location).Y) > D:
          a[i],a[j]=a[j],a[i]
  for k in range(len(a)):
    b.append(a[k])
  return b

这里是通过输入两个布尔值来确定 XY 的排序方向,然后给一个可控的误差变量,就满足了现在排序需求。

当然,我这段代码是以房间为例的,如果你是想对别的图元按坐标排序,需要自己调整下获取 Location 的代码,这里就不过多赘述了~

好了,今天的教程就到这里,小伙伴们快去尝试吧~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/367046.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

跟着cherno手搓游戏引擎【19】抽象纹理

引入: 导入stb_image: GitHub - nothings/stb: stb single-file public domain libraries for C/C 下载复制stb_image.h的内容(8000多行),然后粘到如图位置 stb_image.cpp: #include"ytpch.h" #define STB_IMAGE_IM…

面试八股文(3)

文章目录 1.HashSet如何检查重复2.comparable和Comparator区别3.ConcurrentHashMap和Hashtable区别4.线程和进程5.并发与并行的区别6.为什么使用多线程7.使用多线程可能带来问题8.线程的生命周期和状态9.什么是上下文切换10.线程死锁11.产生死锁四个条件12.如何避免死锁 1.Hash…

双非本科准备秋招(14.1)—— 力扣刷题

今天做两个有点难度的题。 1、295. 数据流的中位数 手写堆实现: 加入元素: 如何维护一个中位数?我们考虑一下堆的特点,大顶堆堆顶是一个最大值,小顶堆堆顶是一个最小值,那么,如果我们可以把数…

NUXTJS安装始终报错无法正常运行问题解决

近日在了解NuxtJS,按照官方给出方法进行安装后,不是报错,就是安装成功后运行不了。执行npm run dev后始终运行出错,判断肯定是对应版本问题,沿着这方向研究,最终运行成功了。 文档地址:安装 - …

【C++初阶】--入门基础(一)

目录 一.命名空间 1.前言引入 2.namespace关键字 (1)前言 (2)域作用限定符 :: (3)命名空间域namespace ① 细节理解 ② 命名空间的名称相同 ③命名空间的嵌套 (4)命名空间的使用 ① 加命名空间名称及作用域限定符 ②使用using将命名空间中某个成员引入 ③ 使用u…

【内置对象·js】

数学对象 document.write("圆周率为 " Math.PI "<br>");日期对象 var date new Date(); // 实例化 Date 对象var month date.getMonth() 1; // 获取月份&#xff0c;取值为 0&#xff08;一月&#xff09;到 11&#xff08;十二月&#xff09;之…

某站平台的签名算法分享

先charles抓包&#xff0c;api.xxxxxx.com域名的包 分析包 看到路径参数如下 appkey1d8b6e7d45233436&build5531000&channeldw056&mobi_appandroid&mode0&oid326052200&plat2&platformandroid&ps20&statistics%7B%22appId%22%3A1%2C%22p…

Redis核心技术与实战【学习笔记】 - 16.Redis 缓存异常:缓存和数据库不一致

概述 只要使用 Redis 缓存&#xff0c;就必须面对缓存和数据库的一致性问题。 重要的是&#xff0c;如果数据不一致&#xff0c;那么业务应用从缓存中读取的数据就不是最新数据&#xff0c;这会导致严重的问题。比如说&#xff0c;我们把电商商品的库存信息缓存在 Redis 中&am…

机器学习_13_SVM支持向量机、感知器模型

文章目录 1 感知器模型1.1 感知器的思想1.2 感知器模型构建1.3 损失函数构建、求解 2 SVM3 线性可分SVM3.1 线性可分SVM—概念3.2 线性可分SVM —SVM 模型公式表示3.3 线性可分SVM —SVM 损失函数3.4 优化函数求解3.5 线性可分SVM—算法流程3.6 线性可分SVM—案例3.7 线性可分S…

如何读论文

如何读论文 0. 目的 单篇文章从头读到尾&#xff0c;可以&#xff1b; 世界上那么多篇文章&#xff0c; 都这样读&#xff0c; 时间上划不来。 适合你的文章就那么一小撮。 paper 的八股文结构&#xff1a; titleabstractintromethodexpconclusion 1. 第一遍 海选&#…

HiveSQL题——聚合函数(sum/count/max/min/avg)

目录 一、窗口函数的知识点 1.1 窗户函数的定义 1.2 窗户函数的语法 1.3 窗口函数分类 聚合函数 排序函数 前后函数 头尾函数 1.4 聚合函数 二、实际案例 2.1 每个用户累积访问次数 0 问题描述 1 数据准备 2 数据分析 3 小结 2.2 各直播间最大的同时在线人数 …

计算视图里的projection和aggregation节点区别

Projection 和 Aggregation到底有什么区别&#xff1f; 看名字就能看出来的。 那么在什么场景下用呢&#xff1f; 1. Projection就是投影&#xff0c;也就是说你本来的源里有什么&#xff0c;就直接给你拿出来。 除了这个&#xff0c;它使用的场景就是&#xff1a; 只映射需…

Framework - ActivityThread 应用启动UI渲染流程

一、概念 ActivityThread拥有 main(String[] agrs) 方法&#xff0c;作为程序的入口&#xff0c;是应用程序的初始化类。&#xff08;ActivityThread不是主线程&#xff0c;它在 main() 方法中实例化&#xff0c;是运行在主线程中。&#xff09;ApplicationThread是 ActivityT…

解析Excel文件内容,按每列首行元素名打印出某个字符串的统计占比(超详细)

目录 1.示例&#xff1a; 1.1 实现代码1&#xff1a;列数为常量 运行结果&#xff1a; 1.2 实现代码2&#xff1a;列数为变量 运行结果&#xff1a; 1.示例&#xff1a; 开发需求&#xff1a;读取Excel文件&#xff0c;统计第3列到第5列中每列的"False"字段占…

STM32SPI通信协议--(2)W25Q64简介

一、W25Q64简介 1、W25Qxx中的xx是不同的数字&#xff0c;表示了这个芯片不同的存储容量&#xff1b; 2、存储器分为易失性与非易失性&#xff0c;主要区别是存储的数据是否是掉电不丢失&#xff1a; 易失性存储器&#xff1a;SRAM、DRAM&#xff1b; 非易失性存储器&#xff…

django+flask+python高校教材管理系统47nia

本.4论文结构 绪论&#xff1a;剖析项目可行性&#xff0c;表明研究方向。 开发技术&#xff1a;系统关键运用了Python技术性、Django框架、B/S架构和myspl数据库查询&#xff0c;并进行了详细介绍[6]。 系统分析&#xff1a;包含系统的总体构造&#xff0c;用例图和结构图。 系…

使用机器学习算法预测在线订餐需求

咱们国内的美团和国外的 Swiggy 和 Zomato 引入市场后&#xff0c;在线订餐的需求量很大。食品配送公司利用客户的购买习惯来加快配送过程。食品订单预测系统是这些公司可以用来加快整个交付过程的有用技术之一。 这些公司对客户的主要目标是在正确的时间交付食物。为了更快地…

二叉树的层序遍历 II

给你二叉树的根节点 root &#xff0c;返回其节点值 自底向上的层序遍历 。 &#xff08;即按从叶子节点所在层到根节点所在的层&#xff0c;逐层从左向右遍历&#xff09; 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[15,7],[9,20],…

【数据开发】pyspark入门与RDD编程

【数据开发】pyspark入门与RDD编程 文章目录 1、pyspark介绍2、RDD与基础概念3、RDD编程3.1 Transformation/Action3.2 数据开发流程与环节 1、pyspark介绍 pyspark的用途 机器学习专有的数据分析。数据科学使用Python和支持性库的大数据。 spark与pyspark的关系 spark是一…

[BUUCTF]-PWN:roarctf_2019_easy_pwn解析

先看保护 64位&#xff0c;got表不可写 看ida 大致就是alloc创建堆块&#xff0c;fill填充堆块&#xff0c;free释放堆块&#xff0c;show输出堆块内容 这里要注意的点有以下 alloc创建堆块&#xff1a;这里采用的是calloc而不是malloc&#xff0c;calloc在创建堆块时会初始…