python实现一个点绕另一个点旋转后的坐标


Posted in Python onDecember 04, 2019

如下所示:

(x,y)为要转的点,(pointx,pointy)为中心点,如果顺时针角度为angle

srx = (x-pointx)*cos(angle) + (y-pointy)*sin(angle)+pointx

sry = (y-pointy)*cos(angle) - (x-pointx)*sin(angle)+pointy

(x,y)为要转的点,(pointx,pointy)为中心点,如果逆时针角度为angle

nrx = (x-pointx)*cos(angle) - (y-pointy)*sin(angle)+pointx

nry = (x-pointx)*sin(angle) + (y-pointy)*cos(angle)+pointy

python实现一个点绕另一个点旋转后的坐标

python实现一个点绕另一个点旋转后的坐标

import numpy as np
import math
import matplotlib.pyplot as plt
# 绕pointx,pointy逆时针旋转
def Nrotate(angle,valuex,valuey,pointx,pointy):
 valuex = np.array(valuex)
 valuey = np.array(valuey)
 nRotatex = (valuex-pointx)*math.cos(angle) - (valuey-pointy)*math.sin(angle) + pointx
 nRotatey = (valuex-pointx)*math.sin(angle) + (valuey-pointy)*math.cos(angle) + pointy
 return nRotatex, nRotatey
# 绕pointx,pointy顺时针旋转
def Srotate(angle,valuex,valuey,pointx,pointy):
 valuex = np.array(valuex)
 valuey = np.array(valuey)
 sRotatex = (valuex-pointx)*math.cos(angle) + (valuey-pointy)*math.sin(angle) + pointx
 sRotatey = (valuey-pointy)*math.cos(angle) - (valuex-pointx)*math.sin(angle) + pointy
 return sRotatex,sRotatey
pointx = 1
pointy = 1
sPointx ,sPointy = Nrotate(math.radians(45),pointx,pointy,0,0)
print(sPointx,sPointy)
plt.plot([0,pointx],[0,pointy])
plt.plot([0,sPointx],[0,sPointy])
plt.xlim(-3.,3.)
plt.ylim(-3.,3.)
plt.xticks(np.arange(-3.,3.,1))
plt.yticks(np.arange(-3.,3.,1))
plt.show()

python实现一个点绕另一个点旋转后的坐标

import numpy as np
import math
import matplotlib.pyplot as plt
# 绕pointx,pointy逆时针旋转
def Nrotate(angle,valuex,valuey,pointx,pointy):
 valuex = np.array(valuex)
 valuey = np.array(valuey)
 nRotatex = (valuex-pointx)*math.cos(angle) - (valuey-pointy)*math.sin(angle) + pointx
 nRotatey = (valuex-pointx)*math.sin(angle) + (valuey-pointy)*math.cos(angle) + pointy
 return nRotatex, nRotatey
# 绕pointx,pointy顺时针旋转
def Srotate(angle,valuex,valuey,pointx,pointy):
 valuex = np.array(valuex)
 valuey = np.array(valuey)
 sRotatex = (valuex-pointx)*math.cos(angle) + (valuey-pointy)*math.sin(angle) + pointx
 sRotatey = (valuey-pointy)*math.cos(angle) - (valuex-pointx)*math.sin(angle) + pointy
 return sRotatex,sRotatey
 
x1 = np.array([1,2,3])
y1 = np.array([1,2,3])
x2 = np.array([3,6])
y2 = np.array([2,1])
# x2往x1上拼
disx = x2[0]-x1[0]
disy = y2[0]-y1[0]
removeX2 = x2-disx
removeY2 = y2-disy
tany1 = y1[-1]-y1[0]
tanx1 = x1[-1]-x1[0]
angle1 = math.degrees(np.arctan(tany1/tanx1))
tany2 = y2[-1]-y2[0]
tanx2 = x2[-1]-x2[0]
angle2 = math.degrees(np.arctan(tany2/tanx2))
disAngle = angle2-angle1
print(angle1)
print(angle2)
print(disAngle)
if disAngle<0:
 rotateX,rotateY = Nrotate(math.radians(abs(disAngle)),removeX2,removeY2,x1[0],y1[0])
else:
 rotateX,rotateY = Srotate(math.radians(abs(disAngle)),removeX2,removeY2,x1[0],y1[0])
plt.plot(x1,y1,color='red')
plt.plot(removeX2,removeY2,color='green')
plt.scatter(rotateX,rotateY,color='yellow')
plt.xlim(0.,10.)
plt.ylim(0.,10.)
plt.xticks(np.arange(0.,10.,1))
plt.yticks(np.arange(0.,10.,1))
plt.show()

python实现一个点绕另一个点旋转后的坐标

以上这篇python实现一个点绕另一个点旋转后的坐标就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中二维阵列的变换实例
Oct 09 Python
Python中的装饰器用法详解
Jan 14 Python
python检测远程端口是否打开的方法
Mar 14 Python
python数据结构之图深度优先和广度优先实例详解
Jul 08 Python
详解Django缓存处理中Vary头部的使用
Jul 24 Python
Python读取txt某几列绘图的方法
Oct 14 Python
python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比
Apr 15 Python
python对象与json相互转换的方法
May 07 Python
pyenv与virtualenv安装实现python多版本多项目管理
Aug 17 Python
python pandas利用fillna方法实现部分自动填充功能
Mar 16 Python
细说NumPy数组的四种乘法的使用
Dec 18 Python
python 数据类型强制转换的总结
Jan 25 Python
Django配置文件代码说明
Dec 04 #Python
python实现回旋矩阵方式(旋转矩阵)
Dec 04 #Python
在Django下创建项目以及设置settings.py教程
Dec 03 #Python
Django自带的加密算法及加密模块详解
Dec 03 #Python
python Opencv计算图像相似度过程解析
Dec 03 #Python
django 中使用DateTime常用的时间查询方式
Dec 03 #Python
在django中自定义字段Field详解
Dec 03 #Python
You might like
dedecms中常见问题修改方法总结
2007/03/21 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
2013/04/28 PHP
php配置php-fpm启动参数及配置详解
2013/11/04 PHP
JavaScript中数组对象的那些自带方法介绍
2013/03/12 Javascript
浅析js中的浮点型运算问题
2014/01/06 Javascript
用jquery仿做发微博功能示例
2014/04/18 Javascript
form.submit()不能提交表单的原因分析
2014/10/23 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
2015/05/11 Javascript
基于JS2Image实现圣诞树代码
2015/12/24 Javascript
jquery单击事件和双击事件冲突解决方案
2016/03/02 Javascript
80%应聘者都不及格的JS面试题
2017/03/21 Javascript
深入理解Angular.JS中的Scope继承
2017/06/04 Javascript
node.js学习之事件模块Events的使用示例
2017/09/28 Javascript
node.js学习之断言assert的使用示例
2017/09/28 Javascript
Vue精简版风格指南(推荐)
2018/01/30 Javascript
vue+springmvc导出excel数据的实现代码
2018/06/27 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
arctext.js实现文字平滑弯曲弧形效果的插件
2019/05/13 Javascript
[50:04]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第二局
2016/02/28 DOTA
[58:58]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第二场
2018/04/05 DOTA
[01:02:05]LGD vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
学习python处理python编码问题
2011/03/13 Python
使用python实现哈希表、字典、集合操作
2019/12/22 Python
PyTorch学习:动态图和静态图的例子
2020/01/06 Python
Django 项目通过加载不同env文件来区分不同环境
2020/02/17 Python
Python类super()及私有属性原理解析
2020/06/15 Python
Pyecharts 中Geo函数常用参数的用法说明
2021/02/01 Python
使用Html5中的cavas画一面国旗
2019/09/25 HTML / CSS
.net软件工程师面试题
2015/03/31 面试题
爱护公共设施倡议书
2014/08/29 职场文书
2014年体育教学工作总结
2014/12/09 职场文书
2016公司年会通知范文
2015/04/25 职场文书
Mac环境Nginx配置和访问本地静态资源的实现
2021/03/31 Servers
python实现求纯色彩图像的边框
2021/04/08 Python
Java设计模式之代理模式
2022/04/22 Java/Android