m0_62718592 2021-11-20 09:58 采纳率: 100%
浏览 210
已结题

定义一个向量类Vector,有以下成员

(1)保护字段存放向量的各个分量值,使用一维数组存放。
(2)公有属性Dim获取向量的维数。
(3)默认的公有构造函数,产生一个零向量,带参数构造函数,使用可变数组参数。
(4)公有方法Dot求两向量点乘的结果, Distance求两个向量之间的距离, Angle求两个向量之间的夹角, Normal对向量进行单位化, Length求向量的长度
(5)重载运算符“+", “.”对两个向量进行加减操作,重载运算符“=”判断两个向量是否是同向的。
(6)公有函数display以如下形式输出向量中的各个分量(1,2..,5)

  • 写回答

2条回答 默认 最新

  • 广大菜鸟 2021-11-20 15:11
    关注
    
    using System;
    using System.Collections.Generic;
    
    namespace ConsoleApp2
    {
        class Vector
        {
            private double[] list;
            private int dim;
    
            public int Dim { get => dim; set => dim = value; }
            protected double[] List { get => list; set => list = value; }
            public Vector()
            {
                list = new double[1];           
                dim = 1;
            }
            public Vector(int length) {         
                list = new double[length];
                for (int i = 0; i < length; i++) list[i] = 0;
                dim = length;
            }
    
            public void SetVectorList(int index,double value)
            {
                if (index < 0)
                {
                    Console.WriteLine("This is a wrong Dim!");
                    return;
                }else if (index >= dim)
                {
                    //数组扩容
                    Array.Resize<double>(ref list, index + 1);
                    this.dim = index+1;
                }
                 list[index] = value;
            }
            // 点乘
            public double Dot(Vector v)
            {
                int d = v.Dim;
                if (d == Dim)
                {
                    double value=0;
                    for(int i = 0; i < v.dim; i++)
                    {
                        value += v.list[i] * this.list[i];
                    }
                    return value;
                }
                else
                {
                    Console.WriteLine("They have wrong Dim!");                
                }
                return 0;
            }
    
            //距离
            public double Distance(Vector v)
            {
                int d = v.Dim;
                if (d == Dim)
                {
                    double value = 0,tmpDouble=0;
                    for (int i = 0; i < d; i++)
                    {
                        tmpDouble = v.list[i] - this.list[i];
                        value += tmpDouble * tmpDouble;
                    }
                    return Math.Sqrt(value);
                }
                else
                {
                    Console.WriteLine("They have wrong Dim!");
                    return 0;
                }
            }
           
            //夹角
            public double Angle(Vector v)
            {
                double dotValue = this.Dot(v);
                double aLen = v.Length();
                double bLen = this.Length();
                return Math.Acos(dotValue/(aLen*bLen));
            }       
            //Normal
            public void Normal()
            {
                double Len = this.Length();
                if (Len > 0)
                {
                    for(int i = 0; i < dim; i++)
                    {
                        this.list[i] /= Len;
                    }
                }
            }
            // Length
            public double Length()
            {
                if (this.Dim <= 0) 
                    return 0;
                double value=0;
                for(int i = 0; i < dim; i++)
                {
                    value += list[i] * list[i];
                }
                return Math.Sqrt(value);
            }
    
            public override string ToString()
            {
                if (dim <= 0) 
                    return "()";
                String str = "(" + list[0].ToString();
                for(int i = 1; i < dim; i++)
                {
                    str += ',' + list[i].ToString();
                }
                str += ')';
                return str;
            }
            public void display()
            {
                Console.WriteLine(this.ToString());
            }
            //重载运算符“+", “-”对两个向量进行加减操作,重载运算符“=”判断两个向量是否是同向的
            public static Vector operator +(Vector a, Vector b)
            {
                int d1 = a.Dim, d2=b.Dim;
                if (d1 == d2)
                {
                    for (int i = 0; i < d1; i++)
                    {
                        a.list[i] += b.list[i];
                    }
                }
                else
                {
                    Console.WriteLine("They have wrong Dim!");
                }
                return a;
            }
    
            public static Vector operator -(Vector a, Vector b)
            {
                int d1 = a.Dim, d2 = b.Dim;
                if (d1 == d2)
                {
                    for (int i = 0; i < d1; i++)
                    {
                        a.list[i] -= b.list[i];
                    }
                }
                else
                {
                    Console.WriteLine("They have wrong Dim!");
                }
                return a;
            }
            public static bool operator == (Vector a, Vector b)
            {
                double angle = a.Angle(b);
                return angle == 0;
            }
            public static bool operator !=(Vector a, Vector b)
            {
                double angle = a.Angle(b);
                return angle != 0;
            }
            public override bool Equals(object obj)
            {
                return this.Equals(obj);
            }
            public override int GetHashCode()
            {
                return base.GetHashCode();
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                Vector v = new Vector();
                v.SetVectorList(0, 1);
                v.SetVectorList(1, 0);
                v.SetVectorList(3, 3);
                Console.WriteLine(v);
                Vector v1 = new Vector(3);
                v1.SetVectorList(0, 1);
                v1.SetVectorList(1, 0);
                v1.SetVectorList(2, 5);
                Console.WriteLine(v1);
            }
        }
    }
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月29日
  • 已采纳回答 11月21日
  • 创建了问题 11月20日

悬赏问题

  • ¥15 Attributeerror:super object has no attribute '__sklearn_tags__'_'
  • ¥15 逆置单链表输出不完整
  • ¥15 宇视vms-B200-A16@R启动不了,如下图所示,在软件工具搜不到,如何解决?(操作系统-linux)
  • ¥500 寻找一名电子工程师完成pcb主板设计(拒绝AI生成式答案)
  • ¥15 关于#mysql#的问题:UNION ALL(相关搜索:sql语句)
  • ¥15 matlab二位可视化能否针对不同数值范围分开分级?
  • ¥15 已经创建了模拟器但是不能用来运行app 怎么办😭自己搞两天了
  • ¥15 关于#极限编程#的问题,请各位专家解答!
  • ¥20 win11账户锁定时间设为0无法登录
  • ¥45 C#学生成绩管理系统