旋转、缩放和平移 2D 坐标?

2024-02-27

我目前正在开发一个项目,尝试使用 Python 成像库创建希尔伯特曲线。我创建了一个函数,它将通过每次迭代生成曲线的新坐标,并将它们放入各种列表中,然后我希望能够移动、旋转和缩放。我想知道是否有人可以给我一些提示或方法来做到这一点,因为我完全无能为力。仍在处理大量代码。

#! usr/bin/python
import Image, ImageDraw
import math

# Set the starting shape
img = Image.new('RGB', (1000, 1000))
draw = ImageDraw.Draw(img)

curve_X = [0, 0, 1, 1]
curve_Y = [0, 1, 1, 0]

combinedCurve = zip(curve_X, curve_Y)
draw.line((combinedCurve), fill=(220, 255, 250))
iterations = 5

# Start the loop
for i in range(0, iterations):
    # Make 4 copies of the curve

    copy1_X = list(curve_X)
    copy1_Y = list(curve_Y)

    copy2_X = list(curve_X)
    copy2_Y = list(curve_Y)

    copy3_X = list(curve_X)
    copy3_Y = list(curve_Y)

    copy4_X = list(curve_X)
    copy4_Y = list(curve_Y)

    # For copy 1, rotate it by 90 degree clockwise
    # Then move it to the bottom left
    # For copy 2, move it to the top left
    # For copy 3, move it to the top right
    # For copy 4, rotate it by 90 degrees anticlockwise
    # Then move it to the bottom right

    # Finally, combine all the copies into a big list
    combinedCurve_X = copy1_X + copy2_X + copy3_X + copy4_X
    combinedCurve_Y = copy1_Y + copy2_Y + copy3_Y + copy4_Y

# Make the initial curve equal to the combined one
curve_X = combinedCurve_X[:]
curve_Y = combinedCurve_Y[:]

# Repeat the loop

# Scale it to fit the canvas
curve_X = [x * xSize for x in curve_X]
curve_Y = [y * ySize for y in curve_Y]
# Draw it with something that connects the dots
curveCoordinates = zip(curve_X, curve_Y)
draw.line((curveCoordinates), fill=(255, 255, 255))

img2=img.rotate(180)
img2.show()

这是一个处理矩阵的解决方案(这对于这种类型的计算是有意义的,最终,2D 坐标是具有 1 列的矩阵!),

缩放非常简单,只需将矩阵的每个元素乘以缩放因子即可:

scaled = copy.deepcopy(original)
for i in range(len(scaled[0])):
    scaled[0][i]=scaled[0][i]*scaleFactor
    scaled[1][i]=scaled[1][i]*scaleFactor

移动非常容易,您所要做的就是将偏移量添加到矩阵的每个元素,这是使用矩阵乘法的方法:

import numpy as np
# Matrix multiplication
def mult(matrix1,matrix2):
    # Matrix multiplication
    if len(matrix1[0]) != len(matrix2):
        # Check matrix dimensions
        print 'Matrices must be m*n and n*p to multiply!'
    else:
        # Multiply if correct dimensions
        new_matrix = np.zeros(len(matrix1),len(matrix2[0]))
        for i in range(len(matrix1)):
            for j in range(len(matrix2[0])):
                for k in range(len(matrix2)):
                    new_matrix[i][j] += matrix1[i][k]*matrix2[k][j]
        return new_matrix

然后创建你的翻译矩阵

import numpy as np
TranMatrix = np.zeros((3,3))
TranMatrix[0][0]=1
TranMatrix[0][2]=Tx
TranMatrix[1][1]=1
TranMatrix[1][2]=Ty
TranMatrix[2][2]=1

translated=mult(TranMatrix, original)

最后,旋转有点棘手(你知道你的旋转角度吗?):

import numpy as np
RotMatrix = np.zeros((3,3))
RotMatrix[0][0]=cos(Theta)
RotMatrix[0][1]=-1*sin(Theta)
RotMatrix[1][0]=sin(Theta)
RotMatrix[1][1]=cos(Theta)
RotMatrix[2][2]=1

rotated=mult(RotMatrix, original)

关于我所做的一些进一步阅读:

  • http://en.wikipedia.org/wiki/Transformation_matrix#Affine_transformations http://en.wikipedia.org/wiki/Transformation_matrix#Affine_transformations
  • http://en.wikipedia.org/wiki/Homogeneous_coordinates http://en.wikipedia.org/wiki/Homogeneous_coordinates
  • http://www.essentialmath.com/tutorial.htm http://www.essentialmath.com/tutorial.htm(关于所有代数变换)

所以基本上,如果您在代码中插入这些操作,将向量乘以旋转/平移矩阵,它应该可以工作

EDIT

我刚刚发现这个 Python 库似乎提供了所有类型的转换:http://toblerity.org/shapely/index.html http://toblerity.org/shapely/index.html

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

旋转、缩放和平移 2D 坐标? 的相关文章

  • Python Popen 与 psexec 挂起 - 不良结果

    我对 subprocess Popen 和我认为是管道的问题有疑问 我有以下代码块 从 cli 运行时 100 都不会出现问题 p subprocess Popen psexec serverName get cmd c ver echo
  • 使用 python 进行串行数据记录

    Intro 我需要编写一个小程序来实时读取串行数据并将其写入文本文件 我在读取数据方面取得了一些进展 但尚未成功地将这些信息存储在新文件中 这是我的代码 from future import print function import se
  • 如何迭代按值排序的 Python 字典?

    我有一本字典 比如 a 6 b 1 c 2 我想迭代一下by value 不是通过键 换句话说 b 1 c 2 a 6 最直接的方法是什么 sorted dictionary items key lambda x x 1 对于那些讨厌 la
  • 如何使用 imaplib 获取“消息 ID”

    我尝试获取一个在操作期间不会更改的唯一 ID 我觉得UID不好 所以我认为 Message ID 是正确的 但我不知道如何获取它 我只知道 imap fetch uid XXXX 有人有解决方案吗 来自 IMAP 文档本身 IMAP4消息号
  • 通过列表理解压平列表列表

    我正在尝试使用 python 中的列表理解来展平列表 我的清单有点像 1 2 3 4 5 6 7 8 只是为了打印这个列表列表中的单个项目 我编写了这个函数 def flat listoflist for item in listoflis
  • 切片 Dataframe 时出现 KeyError

    我的代码如下所示 d pd read csv Collector Output csv df pd DataFrame data d dfa df copy dfa dfa rename columns OBJECTID Object ID
  • 为什么在 Python 2.4 中使用 Unicode 数据会出现 ASCII 编码错误,而在 2.7 中却不会?

    我有一个程序 当在 Python 2 7 中运行时 会生成正确的 Unicode 输出到标准输出 当在 Python 2 4 中运行时 我得到UnicodeEncodeError ascii codec can t encode chara
  • 更改 `base_compiledir` 以将编译后的文件保存在另一个目录中

    theano base compiledir指编译后的文件存放的目录 有没有办法可以永久设置theano base compiledir到不同的位置 也许通过修改一些内部 Theano 文件的内容 http deeplearning net
  • 对图像块进行多重处理

    我有一个函数必须循环遍历图像的各个像素并计算一些几何形状 此函数需要很长时间才能运行 在 24 兆像素图像上大约需要 5 小时 但似乎应该很容易在多个内核上并行运行 然而 我一生都找不到一个有据可查 解释充分的例子来使用 Multiproc
  • Pandas 根据 diff 列形成簇

    我正在尝试使用 Pandas 根据表示时间 以秒为单位 的列中的差异来消除数据框中的一些接近重复项 例如 import pandas as pd numpy as np df pd DataFrame 1200 1201 1233 1555
  • python Soap zeep模块获取结果

    我从 SOAP API 得到如下结果 client zeep Client wsdl self wsdl transport transport auth header lb E authenticate self login res cl
  • 默认情况下,Keras 自定义层参数是不可训练的吗?

    我在 Keras 中构建了一个简单的自定义层 并惊讶地发现参数默认情况下未设置为可训练 我可以通过显式设置可训练属性来使其工作 我无法通过查看文档或代码来解释为什么会这样 这是应该的样子还是我做错了什么导致默认情况下参数不可训练 代码 im
  • 当鼠标悬停在上面时,intellisense vscode 不显示参数或文档

    我正在尝试将整个工作流程从 Eclipse 和 Jupyter Notebook 迁移到 VS Code 我安装了 python 扩展 它应该带有 Intellisense 但它只是部分更糟糕 我在输入句点后收到建议 但当将鼠标悬停在其上方
  • 如何读取Python字节码?

    我很难理解 Python 的字节码及其dis module import dis def func x 1 dis dis func 上述代码在解释器中输入时会产生以下输出 0 LOAD CONST 1 1 3 STORE FAST 0 x
  • Elastic Beanstalk 中的 enum34 问题

    我正在尝试在 Elastic Beanstalk 中设置 django 环境 当我尝试通过requirements txt 文件安装时 我遇到了python3 6 问题 File opt python run venv bin pip li
  • 检查字典键是否有空值

    我有以下字典 dict1 city name yass region zipcode phone address tehsil planet mars 我正在尝试创建一个基于 dict1 的新字典 但是 它不会包含带有空字符串的键 它不会包
  • Python 无法使用套接字绑定我的外部/公共 IP 地址,给出错误但是当使用本地 IP 地址时,错误不会显示

    这是出现主要错误的代码 与我的本地 IP 的绑定将起作用 s bind 192 168 1 4 port 与我的公共 IP 的绑定失败并出现以下错误 s bind 99 99 99 99 port WinError 10049 请求的地址在
  • 从 Twitter API 2.0 获取 user.fields 时出现问题

    我想从 Twitter API 2 0 端点加载推文 并尝试获取标准字段 作者 文本 和一些扩展字段 尤其是 用户 字段 端点和参数的定义工作没有错误 在生成的 json 中 我只找到标准字段 但没有找到所需的 user fields 用户
  • 列表值的意外更改

    这是我的课 class variable object def init self name name alias parents values table name of the variable self name 这是有问题的函数 f
  • Scrapy Spider不存储状态(持久状态)

    您好 有一个基本的蜘蛛 可以运行以获取给定域上的所有链接 我想确保它保持其状态 以便它可以从离开的位置恢复 我已按照给定的网址进行操作http doc scrapy org en latest topics jobs html http d

随机推荐

  • C# 从项目 B 获取项目 A 的表单名称

    我在一个解决方案中有两个项目 project A and project B using VS2010 Ultimate and C windows application Project B充当用户管理应用程序project A In p
  • 双向 SSL 或单向 SSL 当其单向休息调用时?

    我创建了一个 client rest api 它调用 server rest api 单向后调用 我的 client rest api 使用 server rest api 颁发的证书 但是 我的 client rest api 从未向 s
  • 如何设置 JMX 连接器的请求超时

    我正在尝试为 JMX 连接器设置请求超时 但似乎不起作用 env put jmx remote x request waiting timeout new Long 30000 但由于它不起作用 我用谷歌搜索原因 发现标准 JMX 远程 a
  • 从已定义的模型中获取 Sequelize.js ENUM 值

    在 Sequelize js 中定义模型后 如何获取模型的 ENUM 值 例如 我们将模型定义为 sequelize define model states type Sequelize ENUM values active pending
  • Xamarin Studio 无法识别配置文件

    我对这些苹果证书束手无策 我有一个 Xamarin Forms 应用程序 需要使用配置文件进行签名 以便我可以启用推送通知 但是 Xamarin Studio 无法识别我正在制作的任何配置文件 有人可以帮忙吗 Xamarin Studio
  • 电子邮件标头字段“线程索引”如何工作?

    我想知道是否有人知道电子邮件标题中的线程索引字段如何工作 这是我给自己发消息的简单电子邮件线程索引链 Email 1 Thread Index AcqvbpKt7QRrdlwaRBKmERImIT9IDg Email 2 Thread In
  • 将多个 csv 文件读取到 HDF5 时出现 Pandas ParserError EOF 字符

    使用Python3 Pandas 0 12 我正在尝试将多个 csv 文件 总大小为 7 9 GB 写入 HDF5 存储以供稍后处理 每个 csv 文件包含大约 100 万行 15 列 数据类型主要是字符串 但也有一些浮点数 但是 当我尝试
  • 自定义异常 C#

    我想创建我自己的自定义异常 用于我自己的实践 我有 Man 类 我想检查名称 所以它不是空的 空的并且只有英文字符 我不确定我这样做是否正确 1 我是否需要在自定义异常类中编写处理错误 如果发生 的代码 或者在男子二传手中 2 我应该在哪里
  • 需要任意 PHP 文件而不将变量泄漏到范围内

    在 PHP 中是否可以require an 随意的文件而不会将当前作用域中的任何变量泄漏到所需文件的变量命名空间中或污染全局变量作用域 我想使用 PHP 文件进行轻量级模板 并且为了纯粹起见 我想知道是否可以加载一个模板文件 其范围内不包含
  • Xamarin Forms:如何向按钮添加填充?

    我有以下 XAML Xamarin Forms Button
  • Sqlacodegen 生成混合模型和表格

    执行这个命令 sqlacodegen
  • PySpark:使用 newAPIHadoopFile 从多行记录文本文件中读取、映射和减少

    我正在尝试解决一个类似于这个帖子 https stackoverflow com questions 31227363 creating spark data structure from multiline record 我的原始数据是一
  • postgres Heroku 中的 Knex 迁移 - 错误:无法获取连接

    我正在尝试运行我的第一次迁移 它在 Heroku postgres 数据库中创建一个表 当我尝试跑步时knex migrate latest env development我收到错误 错误 无法获取连接 我尝试过的事情 adding ssl
  • Matlab函数处理工作区恶作剧

    In short 有没有一种优雅的方法来限制匿名函数的范围 或者Matlab在这个例子中被破坏了 我有一个函数可以创建要在管网求解器中使用的函数句柄 它将网络状态作为输入 其中包括有关管道及其连接的信息 或者如果必须的话 还可以包括边和顶点
  • 使用 Three.js 和 tween.js 以 90 度增量旋转对象以创建 360 度循环

    我有一个工作动画 但不是我想要的方式 我希望对象延迟旋转 90 度 有效 然后继续旋转 90 度 最终永远循环 无论我做什么 它总是会重置 即使我设置了 4 个补间 将我带到 360 最后一个重置为零的补间也会使整个对象向相反方向旋转 Th
  • Python Tkinter:只要线程运行,如何使 GUI 做出响应?

    例如 import threading import time import Tkinter class MyThread threading Thread def init self threading Thread init self
  • dplyr - 多个汇总函数

    我正在尝试计算数据框的多个统计数据 I tried dplyr s summarise each 但是 结果以平面单行形式返回 并添加函数名称作为后缀 有没有直接的方法 使用dplyr或 base r 我可以在哪里获得数据框中的结果 其中列
  • 如何使用 .NET 获取当前季节? (夏季、冬季等...)

    有没有办法根据给定的日期检索一年中的季节 对于地球上的任何地方 这是基于时区和半球吗 请注意 在南半球 夏季仍然是温暖的月份 EDIT 为了澄清一下 我说的是天文数字seasons http en wikipedia org wiki Se
  • pip安装numpy失败错误代码1

    我正在尝试使用 pip 安装 numpy 当我打字时pip install numpy在命令提示符下它可以工作 但不会安装文件并返回错误代码1 我使用的是 windows 8 64 位和 python 2 7 这是错误消息的最后一点 Cle
  • 旋转、缩放和平移 2D 坐标?

    我目前正在开发一个项目 尝试使用 Python 成像库创建希尔伯特曲线 我创建了一个函数 它将通过每次迭代生成曲线的新坐标 并将它们放入各种列表中 然后我希望能够移动 旋转和缩放 我想知道是否有人可以给我一些提示或方法来做到这一点 因为我完