UVW 在C#中的代码实现

今天聊聊UVW平台用C#实现平移和旋转的功能。
众所周知,UVW平台功能强大,可以实现绕任意点旋转。本来我的工作就是视觉相关。
对于视觉来说, UVW平台在图像里面仅有一个旋转中心。因为相机位置固定, 我们只求出平台的旋转中心就可以做视觉引导。
进入正题。Talk is simple,code first.
下面R, θx1 , θx2 , θy1为供应商提供的固定参数, 和购买的平台有关,需要咨询供应商获取。
简单的理解就是把XYR方向的分量转成UVW对应的轴分量。 XYR分量可以叠加。

  /// <summary>
    /// UVW 类型数据,通常用于XYR增量转UVW增量
    /// </summary>
    public class DataUVW
    {
        #region Public-Members
        private double R { get; set; } = 50;
        private double θx1 { get; set; } = 90 * Math.PI / 180;
        private double θx2 { get; set; } = 270 * Math.PI / 180;
        private double θy1 { get; set; } = 180 * Math.PI / 180;
        public double V { get; set; }
        public double W { get; set; }
        public double U { get; set; }

        #endregion

        #region Private-Members


        #endregion

        #region Constructors-and-Factories
        /// <summary>
        /// XYR移动量转UVW移动量
        /// </summary>
        /// <param name="MoveY">Y方向移动量</param>
        /// <param name="MoveX">X方向移动量</param>
        /// <param name="Rotatetion">旋转角度移动量</param>
        public DataUVW(double MoveY, double MoveX, double Rotatetion)
        {
            Rotatetion *= -1;
            double rad = Rotatetion * Math.PI / 180;
            U = R * Math.Sin(rad + θy1) - R * Math.Sin(θy1);
            V = R * Math.Cos(rad + θx1) - R * Math.Cos(θx1);
            W = -1 * (R * Math.Cos(rad + θx2) - R * Math.Cos(θx2));
            //    W = R * Math.Cos(rad + θx2) - R * Math.Cos(θx2);
            double tempX1 = MoveX;
            double tempX2 = MoveX;
            double tempY1 = MoveY;
            U += tempY1;
            V += tempX1;
            W -= tempX2;
        }
        /// <summary>
        /// XYR移动量转UVW移动量
        /// </summary>
        /// <param name="_dataXYR">封装的XYR体类</param>
        public DataUVW(DataXYR _dataXYR)
        {
            _dataXYR.R *= -1;
            double rad = _dataXYR.R * Math.PI / 180;
            U = R * Math.Sin(rad + θy1) - R * Math.Sin(θy1);
            V = R * Math.Cos(rad + θx1) - R * Math.Cos(θx1);
            W = -1 * (R * Math.Cos(rad + θx2) - R * Math.Cos(θx2));
            //    W = R * Math.Cos(rad + θx2) - R * Math.Cos(θx2);
            double tempX1 = _dataXYR.X;
            double tempX2 = _dataXYR.X;
            double tempY1 = _dataXYR.Y;
            U += tempY1;
            V += tempX1;
            W -= tempX2;
        }
        public DataXYR ToXYR()
        {
            return new DataXYR(U, V, W);
        }
        #endregion

        #region Public-Methods


        #endregion

        #region Private-Methods


        #endregion
    }
  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值