一些预置点函数

变换

相同坐标系下,由一个点到另一个点。

线性变换

给定一个2×22\times 22×2的方阵MMM,然后对点进行该变换。
p′=Mpp'=Mpp′=Mp

直线对称

给定两个点a,ba,ba,b定一条直线,然后找到点相对于该直线的对称点。

首先得到ab→=b−a=(xb−xa,yb−ya)\overrightarrow{ab}=b-a=(x_b-x_a,y_b-y_a)ab=b−a=(xb​−xa​,yb​−ya​),由于对称与直线方向无关,取x轴分量≥0\ge 0≥0的方向,得到新的向量v→=(dx,dy)\overrightarrow{v}=(dx, dy)v=(dx,dy)。

  1. 如果dx=0dx=0dx=0,则关于y轴对称。
    p′=(2xa−xp,yp)p'=(2x_a-x_p,y_p)p′=(2xa​−xp​,yp​)

  2. 如果dy=0dy=0dy=0,则关于x轴对称。
    p′=(xp,2ya−yp)p'=(x_p,2y_a-y_p)p′=(xp​,2ya​−yp​)

  3. 否则,进行如下运算

    首先计算该直线的方程,易得:

    xdy−ydx+(yadx−xady)=0xdy-ydx+(y_adx-x_ady)=0xdy−ydx+(ya​dx−xa​dy)=0

    点到直线的距离为:

    D=∣xpdy−ypdx+(yadx−xady)∣dx2+dy2D=\frac{|x_pdy-y_pdx+(y_adx-x_ady)|}{\sqrt{dx^2+dy^2}}D=dx2+dy2​∣xp​dy−yp​dx+(ya​dx−xa​dy)∣​

    直线的垂直方向为:

    1. 点在直线上方,即xpdy−ypdx+(yadx−xady)<0x_pdy-y_pdx+(y_adx-x_ady)<0xp​dy−yp​dx+(ya​dx−xa​dy)<0,则为(1dy,−1dx)(\frac{1}{dy}, -\frac{1}{dx})(dy1​,−dx1​)
    2. 反之,则为(−1dy,1dx)(-\frac{1}{dy}, \frac{1}{dx})(−dy1​,dx1​)

    新的点的位置:

    xp′=xp±2D1dy(1dx)2+(1dx)2=xp±2dx(xpdy−ypdx+(yadx−xady))dx2+dy2yp′=yp∓2D1dx(1dx)2+(1dx)2=yp∓2dy(xpdy−ypdx+(yadx−xady))dx2+dy2\begin{array}{ll}x_{p'}&=x_p±2D\frac{\frac{1}{dy}}{\sqrt{(\frac{1}{dx})^2+(\frac{1}{dx})^2}}\\&=x_p±2\frac{dx(x_pdy-y_pdx+(y_adx-x_ady))}{dx^2+dy^2}&\end{array}\\\begin{array}{ll}y_{p'}&=y_p\mp2D\frac{\frac{1}{dx}}{\sqrt{(\frac{1}{dx})^2+(\frac{1}{dx})^2}}\\&=y_p\mp2\frac{dy(x_pdy-y_pdx+(y_adx-x_ady))}{dx^2+dy^2}&\end{array}xp′​​=xp​±2D(dx1​)2+(dx1​)2​dy1​​=xp​±2dx2+dy2dx(xp​dy−yp​dx+(ya​dx−xa​dy))​​​yp′​​=yp​∓2D(dx1​)2+(dx1​)2​dx1​​=yp​∓2dx2+dy2dy(xp​dy−yp​dx+(ya​dx−xa​dy))​​​

    化简之,令e=xpdy−ypdx+(yadx−xady)e=x_pdy-y_pdx+(y_adx-x_ady)e=xp​dy−yp​dx+(ya​dx−xa​dy),则:

    p′=(xp−2edxdx2+dy2,yp+2edydx2+dy2)p'=(x_p-2\frac{edx}{dx^2+dy^2}, y_p+2\frac{edy}{dx^2+dy^2})p′=(xp​−2dx2+dy2edx​,yp​+2dx2+dy2edy​)

中心对称

给定一个对称中心点ccc,找到点关于该点的对称点。
p′=2c−pp'=2c-pp′=2c−p

中心缩放

给定一个缩放中心点ccc,找到点关于该点以缩放比为λ\lambdaλ的缩放后的点。
p′=c+λ(p−c)p'=c+\lambda(p-c)p′=c+λ(p−c)

中心旋转

将点相对旋转中心点ccc顺时针旋转θ\thetaθ弧度。相当于进行如下线性变换:

M=(cos⁡θsin⁡θ−sin⁡θcos⁡θ)M=\left(\begin{matrix}\cos{\theta}&\sin{\theta}\\-\sin{\theta}&\cos{\theta}\end{matrix}\right)M=(cosθ−sinθ​sinθcosθ​)

中心

相同坐标系下的若干个点,计算其某个中心。

几何中心

找到所有点的几何中心,通过算术平均。

p′=(∑inxin,∑inyin)p' = (\frac{\sum_i^n x_i}{n}, \frac{\sum_i^n y_i}{n})p′=(n∑in​xi​​,n∑in​yi​​)

多边形质心

设所有点依次连接为封闭多边形,则可以算出其多边形质心。

A=12∑i=0n−1(xiyi+1−xi+1yi)px=16A∑i=0n−1(xi+xi+1)(xiyi+1−xi+1yi)py=16A∑i=0n−1(yi+yi+1)(xiyi+1−xi+1yi)A=\frac{1}{2}\sum_{i=0}^{n-1}(x_iy_{i+1}-x_{i+1}y_i)\\p_x = \frac{1}{6A}\sum_{i=0}^{n-1}(x_i+x_{i+1})(x_iy_{i+1}-x_{i+1}y_i)\\p_y = \frac{1}{6A}\sum_{i=0}^{n-1}(y_i+y_{i+1})(x_iy_{i+1}-x_{i+1}y_i)A=21​i=0∑n−1​(xi​yi+1​−xi+1​yi​)px​=6A1​i=0∑n−1​(xi​+xi+1​)(xi​yi+1​−xi+1​yi​)py​=6A1​i=0∑n−1​(yi​+yi+1​)(xi​yi+1​−xi+1​yi​)

力平衡点

给定一组点,以及点处施加的力的大小,计算最后的力平衡点。

通过迭代的方式,反复向合力方向移动ηi\eta_iηi​,其中ηi=loss(ηi−1)\eta_i=loss(\eta_{i-1})ηi​=loss(ηi−1​)。当某次迭代中求出的合力小于1e−41e^{-4}1e−4时停止。

坐标系转换

将点从它所在的坐标系转换为另一个坐标系。详见《几种坐标系定义与坐标系转换》。

【SDU Chart Team - Core】一些预置点函数相关推荐

  1. iOS8 Core Image In Swift:更复杂的滤镜

    iOS8 Core Image In Swift:自动改善图像以及内置滤镜的使用 iOS8 Core Image In Swift:更复杂的滤镜 iOS8 Core Image In Swift:人脸 ...

  2. iOS Core Image 复杂的滤镜

    在上一篇中几乎没有对滤镜进行更复杂的操作,都是直接把inputImage扔给CIFilter而已,而Core Image实际上还能对滤镜进行更加细粒度的控制,我们在新的工程中对其进行探索.为此,我重新 ...

  3. 提高 Kubernetes 中的 GPU 利用率

    提高 Kubernetes 中的 GPU 利用率 对于可扩展的数据中心性能,NVIDIA GPU 已成为必备品. 由数千个计算内核支持的 NVIDIA GPU 并行处理能力对于加速不同行业的各种应用程 ...

  4. Eclipse闪退/打不开/无法启动/一闪而过

    解决方式: 1.通过在命令行中输入"where java",找到除jdk目录下的所有java相关程序,直接删掉(一般会在C:\WINDOWS\system32下) 2.内存不足,打 ...

  5. 32.ExtJS简单的动画效果

    转自:http://blog.sina.com.cn/s/blog_74684ec501015lhq.html 说明:这篇文章的大部分内容来源于网上,经过自己实现其效果后,整理如下: 在进行 Java ...

  6. Magento调用静态块 static block

    2019独角兽企业重金招聘Python工程师标准>>> 静态块(static block),仅包含一些静态的html内容,不涉及数据库存取,比如像:一些文字和图片链接,网站页脚部分等 ...

  7. 从零开始通过 Artifactory 搭建公网的 maven 仓库

    来自我的 Blog Danny's Dream 起因 最近在给公司的 SDK ,做一个 maven 的仓库,方便 CP 嵌入.花了整两天的时间,身为移动开发的我之前没怎么接触过服务器相关的内容,这里做 ...

  8. Eclipse启动无响应,停留在Loading workbench状态

    转自:http://www.jems.me/blog/web/115-eclipse-starting-halted-when-loading-workbench.html 前两天休眠后机器非正常关机 ...

  9. Eclipse启动无响应 停留在Loading workbench状态的解决办法

    为什么80%的码农都做不了架构师?>>>    Eclipse启动无响应 停留在Loading workbench状态 前两天休眠后机器非正常关机,重新启动后运行eclipse . ...

最新文章

  1. 使用vim保存权限不够的文件
  2. 修改wireshark协议解析规则
  3. java游戏西门大官人_valueOf()方法的使用
  4. anaconda下载的python在哪_python包管理器anaconda介绍安装和使用
  5. C#注册类方法到Lua
  6. jQuery标题文字淡入淡出显示效果
  7. 做对的事情远比把事情做对重要得多
  8. python调用百度地图实现路径规划提取坐标点
  9. Lae程序员小漫画,仅供一乐!
  10. 一个程序员的减肥方法(男女通用); 饮食+运动
  11. android wifi tethering,新增Wi-Fi/USB Tethering功能
  12. 新入职一家公司如何快速进入工作状态
  13. 7-6 符号配对 (20 分)(C语言版)
  14. BZOJ3713: [PA2014]Iloczyn
  15. 无法获得计算机管理权限,技巧:Windows系统如何获得管理员权限?
  16. C和C++中的register变量和volatile变量理解
  17. springboot启动时,排除某些自动配置类
  18. 从语义分析到操作系统,图灵机器人明年就能走进你家?
  19. 中国首位 K8s ingress-nginx reviewer 同时提名成为 Apache APISIX committer
  20. DL4J中文文档/开始/速查表

热门文章

  1. 【Python】LeetCode刷题之最长公前缀,思路2求最小和最大的公前缀
  2. 视频怎么转换成mp3?视频提取音频超简单的方法
  3. Oracle Dataguard(主库为 Oracle rac 集群)配置教程(01)—— dataguard 服务器安装 Oracle 软件
  4. 手机关机后还会有行程记录吗
  5. android-jain-sip-ri
  6. Linux虚拟内存交换空间,Linux 添加 Swp 虚拟内存交换空间
  7. 在C#中使用Google ProtoBuf
  8. UC/OS-II操作系统
  9. Mongodb去重查询
  10. git和svn区别 git的常用指令