这应该说明问题,给出一个可视化工具

但对于在同一距离上获得一组点的正确入口点来说,这并不总是有效的import random

import pylab

import cmath

from itertools import groupby

pts = [(random.randrange(-5,5), random.randrange(-5,5)) for _ in range(10)]

# for this problem complex numbers are just too good to pass up

z_pts = [ i[0] + 1j*i[1] for i in pts if i != (0, 0)]

z_pts.sort(key = lambda x: abs(x))

gpts = [[*g] for _, g in groupby(z_pts, key = lambda x: abs(x) ) ]

print(*gpts, sep='\n')

spts = [1j/2]

for e in gpts:

if len(e) > 1:

se = sorted(e, key = lambda x: cmath.phase(-x / spts[-1]))

spts += se

else:

spts += e

print(spts)

def XsYs(zs):

xs = [z.real for z in zs]

ys = [z.imag for z in zs]

return xs, ys

def SpiralSeg(a, b):

'''

construct a clockwise spiral segment connecting

ordered points a, b specified as complex numbers

Inputs

a, b complex numbers

Output

list of complex numbers

'''

seg = [a]

if a == 0 or a == b:

return seg

# rotation interpolation with complex numbers!

rot = ( b / a ) ** ( 1 / 30 )

# impose cw rotation direction constraint

if cmath.phase( b / a ) > 0: # add a halfway point to force long way around

plr = cmath.polar( b / a )

plr = (plr[0]**(1/2), plr[1] / 2 - 1 * cmath.pi ) # the rotor/2

a_b = cmath.rect(*plr) * a # rotate the start point halfway round

return SpiralSeg(a, a_b) + (SpiralSeg(a_b, b))

for _ in range(30):

a *= rot

seg.append(a)

return seg

segs = [SpiralSeg(a, b) for a, b in zip(spts, spts[1:])]

pylab.axes().set_aspect('equal', 'datalim')

pylab.scatter(*XsYs(z_pts))

for seg in segs:

pylab.plot(*XsYs(seg))

[(1-2j), (-2-1j)]

[(2-3j)]

[(1+4j)]

[(3+3j)]

[(-3-4j), (3-4j), (4-3j)]

[(1-5j)]

[(-4-4j)]

[0.5j, (-2-1j), (1-2j), (2-3j), (1+4j), (3+3j), (-3-4j), (3-4j), (4-3j), (1-5j), (-4-4j)]

[-1j]

[(-1-1j)]

[(-1-2j), (-1+2j), (2+1j)]

[(-4+0j)]

[(1-4j)]

[-5j, (-4-3j)]

[(1-5j)]

[0.5j, -1j, (-1-1j), (-1-2j), (2+1j), (-1+2j), (-4+0j), (1-4j), (-4-3j), -5j, (1-5j)]

python二维列表排序_使用Python按顺时针方向排序二维坐标列表?相关推荐

  1. python 二维列表从小到大_给Python开发者准备的110道面试题

    信息量非常大!这是给Python开发者准备的110道笔试面试题,我只把问题列出来了,答案见文末,建议每道题都要认真刷一遍,有些题可以尝试用多种方式来解答,甚至做延伸学习,说真的,很多题都可以单独拎出来 ...

  2. python 多维list 排序_人生苦短 | Python列表和元组归纳整理

    1. 列表 1.1. 列表是什么? 列表是由一系列按特定顺序排列的元素组成,所以是有序的集合.列表中的元素可以是不同类型的,列表中也可以嵌套列表.在Python中,用方括号[]来表示列表,并用逗号来分 ...

  3. python生成二维码教程_使用Python生成个性二维码

    任务目的 这一步会介绍通过Python中的MyQR包实现生成二维码的操作,包括生成普通二维码.带有静态图和动态图的二维码,同时也会对MyQR生成二维码的常用参数进行介绍说明. 任务步骤注:CVM适合用 ...

  4. python实现五大基本算法_算法基础:五大排序算法Python实战教程

    排序是每个算法工程师和开发者都需要一些知识的技能. 不仅要通过编码实现,还要对编程本身有一般性的了解. 不同的排序算法是算法设计如何在程序复杂性,速度和效率方面具有如此强大影响的完美展示. 让我们来看 ...

  5. 数据结构python学生成绩排序_科学网—数据结构之排序一(python实现) - 郗强的博文...

    本文介绍三种简单的排序算法,包括选择排序.冒泡排序和插入排序.同样每个python的排序函数都是在一个整数列表上进行操作的. 一.交换函数 在每个排序函数中都会使用一个swap函数来交换列表中两个元素 ...

  6. python中用def实现自动排序_用 python 实现各种排序算法

    常见集中排序的算法 归并排序 归并排序也称合并排序,是分治法的典型应用.分治思想是将每个问题分解成个个小问题,将每个小问题解决,然后合并. 具体的归并排序就是,将一组无序数按n/2递归分解成只有一个元 ...

  7. python运维工程师招聘_【python自动化运维工程师工资】图灵学院2020年python自动化运维工程师工资待遇-看准网...

    职位描述 招聘要求: 至少满足下面三个招聘方向中的一条. 招聘主要方向: 一.python web高级讲师 职位要求: 1.精通Python,具有python web开发经验,有参与多个完整的项目生命 ...

  8. python字典按键值排序_在Python中按键或值按升序和降序对字典排序

    python字典按键值排序 Problem Statement: Write a Python program to sort (ascending and descending) a diction ...

  9. python的列表操作_在Python中列表的操作

    列表可以做什么? 假设你要创建一个基于<Go Fish>的游戏.如果你不知道<Go Fish>是什么,就去网上查一下.要实现这个游戏,你需要有一个办法,把"一摞纸牌& ...

  10. python 多关键字排序_用Python排序字​​典

    python 多关键字排序 介绍 (Introduction) In this tutorial, we are going to take a look at the various ways fo ...

最新文章

  1. 听说做前后端的都是这个体会? | 每日趣闻
  2. 用C#制作新闻阅读器(电脑报2005年3月14日 第10期)
  3. (五) 定点迭代法求根
  4. 1.0 深度学习回顾与PyTorch简介 - PyTorch学习笔记
  5. Mysql的两种“排名第几且有可能为空的记录”写法(力扣176)
  6. jQuery获取iframe的document对象的方法
  7. 如何求欧拉函数~转载
  8. 【CSS3】CSS——链接
  9. git提交后的自动化流程构建
  10. Wmware安装Centos7教程
  11. Facebook 真的「非死不可」吗?
  12. StrangeIoC —— Unity MVC 专属框架
  13. 新手开发记录:把ListView、Adapter的逻辑捋顺,做一个微博热搜吧
  14. 代码实现:判断101-200之间有多少个素数(质数),并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。...
  15. TIS-prescan
  16. 多媒体教室建设方案综述
  17. electron tray click right click
  18. 创业不是 闹着玩的,水很深,
  19. 河南灵活用工系统开发|灵活用工平台能为企业带来什么?
  20. 《“爱”是如此的容易...》

热门文章

  1. java 事件通知_正确获取Java事件通知
  2. 具有InlfuxDB的Spring Boot和Micrometer第2部分:添加InfluxDB
  3. 背包问题九讲_背包问题
  4. OCA第6部分中的Java难题
  5. hibernate 刷新_Hibernate事实:了解刷新操作顺序很重要
  6. js 随机1-10随机数_寻找随机的错误-一个真实的故事
  7. 在Hibernate中启用实体和查询缓存
  8. antlr 教程_ANTLR教程– Hello Word
  9. Java中的堆栈安全递归
  10. JBoss BPM Travel Agency的微服务迁移故事