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 相关文章推荐
Win7上搭建Cocos2d-x 3.1.1开发环境
Jul 03 Python
python 线程的暂停, 恢复, 退出详解及实例
Dec 06 Python
基于Python的文件类型和字符串详解
Dec 21 Python
Python面向对象程序设计之继承与多继承用法分析
Jul 13 Python
Linux下python制作名片示例
Jul 20 Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
Nov 29 Python
python3学生名片管理v2.0版
Nov 29 Python
超全Python图像处理讲解(多模块实现)
Apr 13 Python
基于python检查矩阵计算结果
May 21 Python
class类在python中获取金融数据的实例方法
Dec 10 Python
Ubuntu20下的Django安装的方法步骤
Jan 24 Python
Python读取和写入Excel数据
Apr 20 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
php线性表顺序存储实现代码(增删查改)
2012/02/16 PHP
PHP生成制作验证码的简单实例
2016/06/12 PHP
js实现网页倒计时、网站已运行时间功能的代码3例
2014/04/14 Javascript
Node.js异步I/O学习笔记
2014/11/04 Javascript
JavaScript 学习笔记之语句
2015/01/14 Javascript
jQuery实现数秒后自动提交form的方法
2015/03/05 Javascript
深入浅析JavaScript面向对象和原型函数
2016/02/06 Javascript
详解JavaScript正则表达式之分组匹配及反向引用
2016/03/09 Javascript
详解JavaScript中双等号引起的隐性类型转换
2016/05/30 Javascript
Javascript实现汉字和拼音互转的终极方案
2016/10/19 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
2016/10/26 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
2017/01/20 Javascript
H5实现中奖记录逐行滚动切换效果
2017/03/13 Javascript
总结JavaScript在IE9之前版本中内存泄露问题
2018/04/28 Javascript
对node.js中render和send的用法详解
2018/05/14 Javascript
layui: layer.open加载窗体时出现遮罩层的解决方法
2019/09/26 Javascript
[06:33]DOTA2亚洲邀请赛小组赛第二日 TOP10精彩集锦
2015/01/31 DOTA
[01:11:46]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第一场 2月23日
2021/03/11 DOTA
Cython 三分钟入门教程
2009/09/17 Python
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
python线程、进程和协程详解
2016/07/19 Python
Python自定义类的数组排序实现代码
2016/08/28 Python
Python3 socket同步通信简单示例
2017/06/07 Python
Python KMeans聚类问题分析
2018/02/23 Python
实例详解Python模块decimal
2019/06/26 Python
python关于变量名的基础知识点
2020/03/03 Python
Python学习笔记之装饰器
2020/08/06 Python
一款恶搞头像特效的制作过程 利用css3和jquery
2014/11/21 HTML / CSS
英国文具、办公用品和科技商店:Ryman
2018/09/27 全球购物
Bose加拿大官方网站:美国知名音响品牌
2019/03/21 全球购物
出口公司经理求职简历中的自我评价
2013/10/13 职场文书
公司离职证明范本
2014/01/13 职场文书
实习老师离校感言
2014/02/03 职场文书
阳光体育活动总结
2014/04/30 职场文书
庆祝新中国成立65周年“向国旗敬礼”网上签名寄语
2014/09/27 职场文书
教师个人师德总结
2015/02/06 职场文书