[golang]按图片中心旋转后的新图左顶点和原图左顶点的偏移量计算

1 前言

略,作为记录使用

2 代码

/**
 * @Author: FB
 * @Description: 
 * @File:  RotateSample.go
 * @Version: 1.0.0
 * @Date: 2019/9/5 16:23
 */

package main

import (
   "math"
   "strconv"
   "fmt"
   "log"
)


func main() {

   Angle := 90.0
   H := 100.0
   W := 200.0
   L := 0.0
   T := 0.0

   x,y := GetOffsetXYAfterRotationForSVG(W, H, L, T, Angle)
   fmt.Println("x,y=",x,y)
}

func GetOffsetXYAfterRotationForSVG(W, H, L, T, Angle float64) (x, y float64) {

   if Angle <= 0.0 {
      return L, T
   }

   if Angle > 90 && Angle <= 180 {
      Angle = 180 - Angle
   } else if Angle > 180 && Angle <= 270 {
      Angle = 270 - Angle
   } else if Angle > 270 && Angle <= 360 {
      Angle = 360 - Angle
   } else if Angle <= 0 {
      log.Println("Exception-> Angle < 0")
      //Angle = 360 + Angle
   } else { //0<Angle<=90

   }

   R := math.Sqrt(math.Pow(W, 2)+math.Pow(H, 2)) / 2
   AngleRadBeta := math.Atan(H / W)
   AngleBeta := AngleRadBeta * 180 / math.Pi

   fmt.Println("Angle,H,W,L,T,ZHalf,AngleBeta=", Angle, H, W, L, T, R, AngleBeta)

   //开始计算,在以对角线一半为半径画圆,初始化角度为Anglebeta
   A1 := Angle + AngleBeta
   A2 := 90 + Angle - AngleBeta
   //A3 := AngleBeta - Angle

   AngleRad1 := A1 * math.Pi / 180
   AngleRad2 := A2 * math.Pi / 180
   //AngleRad3 := A3 * math.Pi / 180

   SinA1 := math.Sin(AngleRad1)
   SinA2 := math.Sin(AngleRad2)
   //CosA3 := math.Cos(AngleRad3)
   //fmt.Println("sin1,sin2,cos3=",SinA1,SinA2,CosA3)

   X := -R * SinA2
   Y := -R * SinA1

   fmt.Println("X,Y=", X, Y)

   x = L + DecimalPrec(X+W/2, 3)
   y = T + DecimalPrec(Y+H/2, 3)

   return x, y

}

func DecimalPrec(value float64, prec int) float64 {
   value, _ = strconv.ParseFloat(fmt.Sprintf("%."+strconv.Itoa(prec)+"f", value), 64)
   return value
}

3 图片

说明:偏移量为P到P°的偏移量

 

转载于:https://www.cnblogs.com/fanbi/p/11474615.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值