在Python 3.2中绘制n条边的多边形

2023-11-25

我必须用 Python 编写一个程序来读取值 n 并在屏幕上绘制一个 n 边的多边形。我可以使用海龟图形模块或graphics.py 模块。

我知道当 n = 输入的点数然后在屏幕上单击 n 次时如何绘制多边形,但我在了解如何将多条边转换为多边形时遇到了一些困难。

这是我为具有 n 个点的多边形编写的代码:

def newPolygon(self,cmd):
    p = eval(input("how many points"))
    print("click",p,"times")
    num = []
    for i in range(p):
        vertices = self.win.getMouse()
        num.append(vertices)

    poly = Polygon(num)
    poly.setFill(self.color)
    poly.draw(self.win)

    self.figs.append(poly)

这不是程序的全部代码(共 384 行)。这只是程序的一部分,其中绘制多边形函数位于 self.figs = [ ] ,绘制图形的列表。


我假设您想要的是一种生成等边多边形坐标的方法,您可以将其提供给绘图程序。我不确定您正在使用哪个库,所以我将坚持使用值对列表:

import math


def polygon(sides, radius=1, rotation=0, translation=None):
    one_segment = math.pi * 2 / sides

    points = [
        (math.sin(one_segment * i + rotation) * radius,
         math.cos(one_segment * i + rotation) * radius)
        for i in range(sides)]

    if translation:
        points = [[sum(pair) for pair in zip(point, translation)]
                  for point in points]

    return points

里面发生了很多事情,所以我会讲一下。基本方法是扫出一个圆圈,然后将n其上等间隔的点。这些将是多边形的点,从 12 点钟位置开始。

首先要做的是计算出每个楔形从中心向外的角度(以弧度为单位)。一个圆的弧度总数是 2 pi,所以我们的值为 2 pi /n每段。

之后,一些基本的三角函数给了我们我们的观点(https://en.wikipedia.org/wiki/Trigonometry#Extending_the_definitions)。此时,我们按所需的半径进行缩放,并且也有机会将旋转偏移固定量。

之后,我们将值平移一定的量,因为您可能希望多边形位于屏幕的中心,而不是角落。

几个例子

print polygon(5)    # A unit pentagon

# [(0.0, 1.0), (0.9510565162951535, 0.30901699437494745), (0.5877852522924732, -0.8090169943749473), (-0.587785252292473, -0.8090169943749476), (-0.9510565162951536, 0.30901699437494723)]

print polygon(4, 100) # A square, point up, 100 from the center to the points

# [(0.0, 100.0), (100.0, 6.123233995736766e-15), (1.2246467991473532e-14, -100.0), (-100.0, -1.8369701987210297e-14)]

print polygon(4, 2, math.pi / 4, [10, 10])  # A flat square centered on 10, 10

# [[11.414213562373096, 11.414213562373096], [11.414213562373096, 8.585786437626904], [8.585786437626904, 8.585786437626904], [8.585786437626904, 11.414213562373094]]

正如您所看到的,这些都是浮点数,因此您可能需要将它们压缩为整数才能使用它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Python 3.2中绘制n条边的多边形 的相关文章

  • 如何在不在 iPython 笔记本中使用离线模式下的plotly进行绘图?

    我需要使用plotly绘制我的数据 但是这段代码没有给我任何结果 我显示我的数据 但没有任何数字 import plotly graph objs as go from plotly offline import download plot
  • 获得熊猫按群体连续几周的最长连续记录

    目前我正在处理不同主题的每周数据 但可能会有一些没有数据的长连续 所以 我想做的就是保留每个连续几周的最长连续id 我的数据如下所示 id week 1 8 1 15 1 60 1 61 1 62 2 10 2 11 2 12 2 13 2
  • ResultSet 对象没有属性“find_all”

    当我抓取一个网页时 我总是遇到一个问题 AttributeError ResultSet 对象没有属性 find 您可能将项目列表视为单个项目 当您打算调用 find 时 您是否调用了 find all 谁能告诉我如何解决这个问题 我的代码
  • Keras 中的 load_model 和 Lambda 层

    如何加载具有 lambda 层的模型 这是重现行为的代码 MEAN LANDMARKS np load data mean shape 68 npy def add mean landmarks x mean landmarks np ar
  • 将鼠标悬停在 Folium 的弹出窗口中

    用这样一个简单的例子 import folium map 1 folium Map location 45 372 121 6972 zoom start 12 tiles Stamen Terrain folium Marker 45 3
  • 为什么这个“[::-1]”在Python中返回一个反向列表? [复制]

    这个问题在这里已经有答案了 可能的重复 Python 切片表示法的良好入门指南 https stackoverflow com questions 509211 good primer for python slice notation P
  • mypy 错误,使用 Union/Optional 重载,“重载函数签名 1 和 2 与不兼容的返回类型重叠”

    那么 让我们从一个例子开始 假设我们有几种可以组合在一起的类型 假设我们正在使用 add 来实施这一点 不幸的是 由于我们无法控制的情况 一切都必须是 可为空的 因此我们被迫使用Optional到处 from typing import O
  • 如何在不使用pygame的情况下检测按键事件和按键按住事件

    我目前正在寻找一个能够检测 监视键盘的库 我的目的是检测何时按下某个键 以及当它发生时应该发生一些事情 大多数 SO 帖子建议使用 pygame 但我发现它有点太多了 涉及一个像这样的库来完成这个简单的任务 我也尝试过pynput 这导致只
  • 视频的 EXIF 之类的东西

    有没有从视频文件中获取信息的标准方法 对于图像 我们有 EXIF 数据 可用于获取有关图像文件的日期 时间 大小等信息 我想知道视频是否也有这样的东西 用例是 我有很多用数码相机拍摄的视频 我想将它们重命名为更有意义的名称 例如 YYYY
  • OSMNX - 边缘的哪个“部分”被认为是最近的

    我正在使用 OSMNX 中的 returned edges 函数 我不清楚在进行此计算时使用边缘的哪个 部分 它是边缘的任何部分吗 是中间点吗 对于网络中的长边来说 这会产生很大的差异 这取决于您如何参数化该函数 来自nearest edg
  • matplotlib 示例代码不适用于 python 虚拟环境

    我正在尝试在 matplotlib 中显示图像的 x y z 坐标 示例代码 http matplotlib org examples api image zcoord html在全局 python 安装上工作得很好 当我移动光标时 x y
  • python 使用曲面图和第四个变量的滑块可视化 4d 数据

    如何使用前 3 个变量和第四个变量的 3 维曲面图作为滑块来可视化 4 维数据 从 csv 文件加载 集 我写了一个非常小的示例 重点介绍了实现此目标的方法 import numpy as np import matplotlib pypl
  • python中matlab find函数的替换

    我正在尝试寻找合适的python函数来替代matlabfind在我的脚本和一些谷歌搜索中我看到np where 大多数时候都能解决目的 但在双重条件的情况下 我有不同的输出 有人可以告诉我这种方法有什么问题以及如何继续吗 示例代码和差异如下
  • 使用 Cython 扩展模块分发共享库和一些 C 代码

    我正在尝试从大型 C 共享库 libbig so 中获取一些函数 并通过 Cython 将它们公开给 Python 为此 我有一个小 C 文件 small cpp 它为我需要的共享库的功能提供了一个薄包装器 从而可以轻松地通过 Cython
  • 相比之下,超出了最大递归深度

    我写了这段代码来计算组合的数量 def fact n return 1 if n 1 else n fact n 1 def combinations n k return fact n fact n k fact k while True
  • 无法通过蓝牙读取心率服务

    我希望创建一个简单的 python 脚本 通过蓝牙从 Polar 传感器读取心率数据 我已经阅读了很多其他帖子 但找不到我能够成功执行的简单内容 我有 Polar 可穿戴设备的设备 MAC 地址 我知道我想要读取的值的服务 UUID HR
  • 使用 Python for PyQt WebEngine 授予对 Cam & Mic 的访问权限

    我正在构建一个从 Python 调用的简单 Web 应用程序 我正在使用下面的代码 加载此页面时 以编程方式授予对摄像头和麦克风的访问权限的最简单方法是什么 我只在网上找到了 C 示例 无法找到在 Python 代码中执行此操作的方法 fr
  • Python Blowfish 加密

    由于我对 Java 的了解不完整 我正在努力将此加密代码转换为 Python 代码 两者应该得到完全相同的结果 帮助将不胜感激 Java函数 import javax crypto Cipher import javax crypto sp
  • Python:正则表达式 findall

    我使用 python 正则表达式从给定字符串中提取某些值 这是我的字符串 mystring txt sometext somemore text here some other text course course1 Id Name mar
  • 命名空间与常规包

    命名空间 Python 包之间有什么区别 没有 init py 和一个常规的Python包 有一个 init py 特别是当 init py普通包裹是空的吗 我很好奇 因为最近我忘记了 init py在我制作的包中 我从未注意到任何问题 事

随机推荐

  • LinkedHashSet .equals() 与 LinkedList .equals() 具有相同的元素但顺序不同

    考虑以下 SSCCE public static void main String args LinkedHashSet
  • CSS:如何垂直和水平对齐图像?

    我的页面有空间容纳图像 例如最大尺寸为 100x100 的图像 用户可以上传任何尺寸的图像 Web 应用程序将在保持宽高比的情况下将其大小调整为 100x100 因此 图像的大小可以调整为 75x100 或 100x75 等 无论调整大小的
  • 如何使用 Django 中内置的“password_reset”视图?

    我在 urls py 中设置了以下条目 r password reset django contrib auth views password reset 但一旦我去http 127 0 0 1 8000 password reset 我收
  • 在 colgroup 中使用文本对齐中心

    我的页面中有一个表格 我使用 colgroups 以相同的方式格式化此列中的所有单元格 它适用于背景颜色等 但我似乎无法弄清楚为什么文本对齐中心不起作用 它不会将文本居中对齐 Example table cellspacing 5 tabl
  • 如何在flutter中显示.9.png格式的图片?

    这是我的代码 new Image asset images launcher border highlight 9 png fit BoxFit fill 当我改变图像的宽度和高度时 它的显示效果很差 但在原生android中显示正常 fl
  • 在原子变量的上下文中什么是总线锁定?

    我使用 C 很长时间了 现在我开始学习汇编并了解处理器的工作原理 不仅仅是为了好玩 而且我必须将其作为测试程序的一部分 在学习汇编时 我开始听到一些在讨论多线程时到处听到的术语 因为我在科学计算中进行了大量的多线程处理 我正在努力了解全貌
  • 用 Java 处理下载

    我如何能够使用 Java 中的 HttpResponse 处理下载 我向特定站点发出了 HttpGet 请求 该站点返回要下载的文件 我该如何处理这个下载 InputStream 似乎无法处理它 或者也许我使用它的方式错误 假设你实际上正在
  • Fortran 可变参数宏中的 CPP/GPP(加上 Fortran // 连接)

    我正在尝试编译一个巨大的 世界知名的数值天气预报代码 主要用 Fortran 90 编写 使用cpp广泛且成功地与 PGI Intel 和 gfortran 合作 现在 我继承了一个版本 其中专家添加了数百个可变参数宏案例 他们使用英特尔和
  • 安装 IE9 后 Visual Studio 2012 崩溃(故障模块 ntdll.dll)

    Okay 自从 Visual Studio RTM 在我的工作计算机上发布以来 我一直在运行它 上周五我安装 更新了 IE 至版本 9 以测试 JavaScript 问题 安装 IE9 并重新启动计算机后 Visual Studio 201
  • .NET:Type.GetHashCode 是否保证唯一?

    我有人使用 Type GetHashCode 就好像它是主键一样 我认为这是一个可怕的想法 但我想知道是否有某种记录的特殊情况表明没有两种类型具有相同的哈希码 GetHashCode 没有任何保证 除了它可能会随机分布 不是唯一的 文档特别
  • VSTS 构建失败并出现 MSB3325,无法导入 PFX 密钥文件

    我创建了一个构建定义来在 Visualstudio com 上在线构建桌面应用程序 该应用程序在任务构建解决方案 Visual Studio 构建 中失败 并出现以下错误 错误 C Program Files x86 Microsoft V
  • 如何在 Play Framework 2 中调用接受可变数量参数的模板

    Play Framework 2 模板语言非常好 然而 尽管它 受到 微软 Razor 语言的 启发 但一个重要的设计决策是不同的 如何 逃回 HTML Razor 会寻找 HTML 样式的标签 而 Play 2 使用某种启发式方法 我正在
  • 计算第 N 个置换步骤?

    我有一个字母 a z 的 char 26 通过嵌套的 for 语句 我正在生成一个序列列表 例如 aaa aaz aba abb abz zzy zzz 目前 该软件被编写为从 aaa zzz 生成所有可能值的列表 然后维护一个索引 并遍历
  • MATLAB:需要制作 4D 绘图(3D + 颜色/颜色)

    我需要制作一个 3D 表面 其中颜色代表第四个变量 我知道 冲浪 与我需要的类似 但事实并非如此 基本上 我有以下变量 t 1 米 y 1 n a 1 o 这些应该是三个笛卡尔坐标轴 我还有一个变量 S 其尺寸为 m x n x o 基本上
  • 避免脚本中某些参数的混合

    我有一个脚本可以使用获取数十个参数 标志Getopt Long 某些标志不允许混合 例如 linux unix不允许一起供应 我知道我可以使用if陈述 有没有更干净 更好的方法来做到这一点 if如果我不想允许多种标志组合 块可能会变得丑陋
  • C/C++中有复制数组的函数吗?

    我知道Java有一个函数System arraycopy 复制数组 我想知道 C 或 C 中是否有一个函数可以复制数组 我只能找到通过使用复制数组的实现for循环 指针等 但是有没有可以用来复制数组的库函数 既然您要求 C 解决方案 inc
  • 如何使用 JavaScript 将字符串的波斯语和阿拉伯语数字转换为英语?

    如何使用简单的函数将波斯 阿拉伯数字转换为英文数字 arabicNumbers persianNumbers 它是相同的架构 但代码页不同 Oneliner英语 阿拉伯语和波斯语数字之间所有 6 种可能的翻译 警告 请注意 此解决方案效率不
  • Eclipse 为带有“m”后缀的域对象和类成员生成 getter/setter

    我有一个关于域对象中生成的 getter 和 setter 方法的小问题 我想为我的源代码使用通用的样式指南 该风格指南的一部分说 我以成员前缀 m 开头每个类成员名称 class User String mName List
  • 集合 <__NSArrayM: 0x7fa1f2711910> 在枚举时发生突变

    有很多类似标题的问题 但没有一个对我有帮助 但我可以联系这个解决方案 NSGenericException 原因 集合 在枚举时发生了变化用我的问题来提问 因为这个终止正在发生 当我添加 删除带有数组的字符串对象时 Error 由于未捕获的
  • 在Python 3.2中绘制n条边的多边形

    我必须用 Python 编写一个程序来读取值 n 并在屏幕上绘制一个 n 边的多边形 我可以使用海龟图形模块或graphics py 模块 我知道当 n 输入的点数然后在屏幕上单击 n 次时如何绘制多边形 但我在了解如何将多条边转换为多边形