none
请教一段数学算式 RRS feed

  • 问题

  •  public class Vector
        {
            public double? R = null;
            public double? Theta = null;
            public double? ThetaRadians
            {
                get
                {
                    return (Theta * Math.PI / 180.0);
                }
            }
            public Vector(double? r, double? theta)
            {
                if (r < 0)
                {
                    r = -r;
                    theta += 180;
                }
                theta = theta % 360;
                R = r;
                Theta = theta;
            }
            public static Vector operator +(Vector op1, Vector op2)//可否给逐行解析一下
            {
                double newX = op1.R.Value * Math.Sin(op1.ThetaRadians.Value) + op2.R.Value * Math.Sin(op2.ThetaRadians.Value);
                double newY = op1.R.Value * Math.cos(op1.ThetaRadians.Value) + op2.R.Value * Math.cos(op2.ThetaRadians.Value);
                double newR = Math.Sqrt(newX * newX + newY * newY);
                double newTheta = Math.Atan2(newX, newY) * 180.0 / Math.PI;
                return new Vector(newR, newTheta);
            }

    2010年9月25日 2:08

答案

  • 1)这是一个向量的类,其表示方法采用的不是如我们常见的二维向量表示法,如OA = (x, y),而是采用极坐标的表示方法,及OA = (R, Theta),其中R代表的是这个向量的长度,也就是X^2 + y^2再开平方,Theta代表的是向量和横轴的夹角,你可以在稿纸上画出图来;

    2)你想要被解释的代码段,其实质是vector的相加运算,通过向量的平行四边形相加原则,假设两个向量OA = (r1, theta1) 和 OB = (r2, theta2)相加,可得你所提及的计算公式。

    希望有用!

    • 已标记为答案 乔峰 2010年9月26日 6:31
    2010年9月25日 3:48
  • 你好!

         public static Vector operator +(Vector op1, Vector op2)//重载“+”运算符来实现向量的加法,重载以后,当两个Vector实力相加的时候,就执行这个方法中的代码
            {
                double newX = op1.R.Value * Math.Sin(op1.ThetaRadians.Value) + op2.R.Value * Math.Sin(op2.ThetaRadians.Value);
                double newY = op1.R.Value * Math.cos(op1.ThetaRadians.Value) + op2.R.Value * Math.cos(op2.ThetaRadians.Value);
                double newR = Math.Sqrt(newX * newX + newY * newY);
                double newTheta = Math.Atan2(newX, newY) * 180.0 / Math.PI;
                return new Vector(newR, newTheta);
            }


    周雪峰
    • 已标记为答案 乔峰 2010年9月26日 6:31
    2010年9月25日 11:55
    版主

全部回复

  • 1)这是一个向量的类,其表示方法采用的不是如我们常见的二维向量表示法,如OA = (x, y),而是采用极坐标的表示方法,及OA = (R, Theta),其中R代表的是这个向量的长度,也就是X^2 + y^2再开平方,Theta代表的是向量和横轴的夹角,你可以在稿纸上画出图来;

    2)你想要被解释的代码段,其实质是vector的相加运算,通过向量的平行四边形相加原则,假设两个向量OA = (r1, theta1) 和 OB = (r2, theta2)相加,可得你所提及的计算公式。

    希望有用!

    • 已标记为答案 乔峰 2010年9月26日 6:31
    2010年9月25日 3:48
  • 你好!

         public static Vector operator +(Vector op1, Vector op2)//重载“+”运算符来实现向量的加法,重载以后,当两个Vector实力相加的时候,就执行这个方法中的代码
            {
                double newX = op1.R.Value * Math.Sin(op1.ThetaRadians.Value) + op2.R.Value * Math.Sin(op2.ThetaRadians.Value);
                double newY = op1.R.Value * Math.cos(op1.ThetaRadians.Value) + op2.R.Value * Math.cos(op2.ThetaRadians.Value);
                double newR = Math.Sqrt(newX * newX + newY * newY);
                double newTheta = Math.Atan2(newX, newY) * 180.0 / Math.PI;
                return new Vector(newR, newTheta);
            }


    周雪峰
    • 已标记为答案 乔峰 2010年9月26日 6:31
    2010年9月25日 11:55
    版主