Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 10.12.2013
Сообщений: 64

Составить описание класса для вектора

27.07.2014, 16:32. Показов 2830. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Писали код (лабораторная работа), возникли проблемы с формулами сложения и вычитания векторов в трехмерном пространстве (условие в изображении). Будьте добры подскажите! Спасибо!

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
  class Vector
  {
    public double x1, y1, z1, x2, y2, z2;
 
    public Vector()
    {
      x1 = y1 = z1 = x2 = y2 = z2 = 0;
    }
 
    public void Input()
    {
      Console.Write("x1 = "); x1 = double.Parse(Console.ReadLine());
      Console.Write("y1 = "); y1 = double.Parse(Console.ReadLine());
      Console.Write("z1 = "); z1 = double.Parse(Console.ReadLine());
 
      Console.Write("x2 = "); x2 = double.Parse(Console.ReadLine());
      Console.Write("y2 = "); y2 = double.Parse(Console.ReadLine());
      Console.Write("z2 = "); z2 = double.Parse(Console.ReadLine());
    }
 
    public void Output()
    {
      Console.WriteLine("x1 = " + x1.ToString());
      Console.WriteLine("y1 = " + y1.ToString());
      Console.WriteLine("z1 = " + z1.ToString());
 
      Console.WriteLine("x2 = " + x2.ToString());
      Console.WriteLine("y2 = " + y2.ToString());
      Console.WriteLine("z2 = " + z2.ToString());
    }
 
    public Vector Plus(Vector a, Vector b)
    {
      Vector c = new Vector();
      c.x1 = a.x2 + a.x1; //формулы
      c.y1 = a.y2 + a.y1; //формулы               
      c.z1 = a.z2 + a.z1; //формулы
 
      c.x2 = a.x2 + a.x1; //формулы
      c.y2 = a.y2 + a.y1; //формулы
      c.z2 = a.z2 + a.z1; //формулы
 
      return c;
    }
 
    public Vector Minus(Vector a, Vector b)
    {
      Vector c = new Vector();
      c.x1 = a.x2 - a.x1; //формулы
      c.y1 = a.y2 - a.y1; //формулы
      c.z1 = a.z2 - a.z1; //формулы
 
      c.x2 = a.x2 - a.x1; //формулы
      c.y2 = a.y2 - a.y1; //формулы
      c.z2 = a.z2 - a.z1; //формулы  
      return c;
    }
 
    public double Scal(Vector a)
    {
      return (this.x2 - this.x1) * (a.x2 - a.x1) + (this.y2 - this.y1) * (a.y2 - a.y1) + (this.z2 - this.z1) * (a.z2 - a.z1);
    }
 
    public double Len()
    {
      return Math.Sqrt((this.x2 - this.x1) * (this.x2 - this.x1) + (this.y2 - this.y1) * (this.y2 - this.y1) + (this.z2 - this.z1) * (this.z2 - this.z1));
    }
 
    public double Cos(Vector a)
    {
      return this.Scal(a)/this.Len()/a.Len();
    }
  }
 
  class Program
  {
    static void Main(string[] args)
    {
      Vector a = new Vector(), b = new Vector();
 
      Console.WriteLine("Введите вектор a:");
      a.Input();
 
      Console.WriteLine("\nВведите вектор b");
      b.Input();
 
      Console.WriteLine("\na + b =");
      a.Plus(a,b).Output();
 
      Console.WriteLine("\na - b =");
      a.Minus(a,b).Output();
 
      Console.WriteLine("\na * b = " + a.Scal(b).ToString() + "\n");
 
      Console.WriteLine("\n|a| = " + a.Len().ToString() + "\n");
 
      Console.WriteLine("\ncos(a^b) = " + a.Cos(b).ToString() + "\n");
 
      Console.ReadKey();
    }
  }
}
Миниатюры
Составить описание класса для вектора  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.07.2014, 16:32
Ответы с готовыми решениями:

Составить описание класса для вектора
Составить описание класса для вектора заданного координатами его концов в трехмерном пространстве. Обеспечит операции сложения и вычитания...

Составить описание класса для вектора
Решите,пожалуйста, задачу! Составить описание класса для вектора, заданного координатами его концов в трехмерном пространстве. Обеспечить...

Составить описание класса для вектора, заданного его координатами в трехмерном пространстве
Разрабатываемый класс должен содержать следующие элементы: скрытые и открытые поля, конструкторы без параметров и с параметрами (имена...

6
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
27.07.2014, 16:41
У 3d вектора должно быть три координаты. У вас их шесть. Почитайте про ООП для начала.
0
0 / 0 / 0
Регистрация: 10.12.2013
Сообщений: 64
27.07.2014, 16:52  [ТС]
IamRain, Всё верно в коде. Это координаты концов вектора в трехмерном пространстве. В этом вся и сложность.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
27.07.2014, 17:10
Вы должны описать для начала класс вектор. У вектора должно быть три координаты.
А не шесть:
Цитата Сообщение от Hollukeri Посмотреть сообщение
public double x1, y1, z1, x2, y2, z2;
0
871 / 721 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
27.07.2014, 18:23
Hollukeri,
Если заданы только координаты конца, то скорее всего начало векторов в начале координат.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
class Program
    {
 
 
        public static void Main(string[] args)
        {
            Vector a = new Vector(), b = new Vector();
 
            Console.WriteLine("Введите вектор a:");
            a.Input();
 
            Console.WriteLine("\nВведите вектор b");
            b.Input();
 
            Console.WriteLine("\na + b =");
            a.Plus(b).Output();
 
            Console.WriteLine("\na - b =");
            a.Minus(b).Output();
 
            Console.WriteLine("\na * b = " + a.Scal(b).ToString() + "\n");
 
            Console.WriteLine("\n|a| = " + a.Len().ToString() + "\n");
 
            Console.WriteLine("\ncos(a^b) = " + a.Cos(b).ToString() + "\n");
 
            Console.ReadKey();
        }
 
        class Vector
        {
            public double X { get; set; }
            public double Y { get; set; }
            public double Z { get; set; }
 
            public Vector()
            {
                X = Y = Z = 0;
            }
 
            public Vector(double x, double y, double z)
            {
                this.X = x;
                this.Y = y;
                this.Z = z;
            }
 
            public void Input()
            {
                Console.Write("X = "); X = double.Parse(Console.ReadLine());
                Console.Write("Y = "); Y = double.Parse(Console.ReadLine());
                Console.Write("Z = "); Z = double.Parse(Console.ReadLine());
            }
 
            public void Output()
            {
                Console.WriteLine("X = " + X.ToString());
                Console.WriteLine("Y = " + Y.ToString());
                Console.WriteLine("Z = " + Z.ToString());
            }
 
            public Vector Plus(Vector a)
            {
                double newX = this.X + a.X;
                double newY = this.Y + a.Y;
                double newZ = this.Z + a.Z;
                Vector c = new Vector(newY, newY, newZ);
                return c;
            }
 
            public Vector Minus(Vector a)
            {
                double newX = this.X - a.X;
                double newY = this.Y - a.Y;
                double newZ = this.Z - a.Z;
                Vector c = new Vector(newY, newY, newZ);
                return c;
            }
 
            public double Scal(Vector a)
            {
                return (this.X * a.X + this.Y * a.Y + this.Z * a.Z);
            }
 
            public double Len()
            {
                double sqrLen = X * X + Y * Y + Z * Z;
                return Math.Sqrt(sqrLen);
            }
 
            public double Cos(Vector a)
            {
                return (this.Scal(a) / ( this.Len() * a.Len() ));
            }
        }
 
 
    }
1
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
27.07.2014, 19:38
Цитата Сообщение от Hollukeri Посмотреть сообщение
В этом вся и сложность.
В чем именно заключена сложность?

Добавлено через 24 минуты
Hollukeri, вот пример. Дальше по этому образцу пилите.
Класс
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    public class Vector
    {
        public int X_1 { get; set; }
        public int X_2 { get; set; }
 
        public int Y_1 { get; set; }
        public int Y_2 { get; set; }
 
        public int Z_1 { get; set; }
        public int Z_2 { get; set; }
 
        //Operator +
        public static Vector operator +(Vector v1, Vector v2)
        {
            Vector temp = new Vector();
            temp.X_1 = (v1.X_1 + v2.X_1);
            temp.X_2 = (v1.X_2 + v2.X_2);
 
            temp.Y_1 = (v1.Y_1 + v2.Y_1);
            temp.Y_2 = (v1.Y_2 + v2.Y_2);
 
            temp.Z_1 = (v1.Z_1 + v2.Z_1);
            temp.Z_2 = (v1.Z_2 + v2.Z_2);
 
            return temp;
        }
 
        //Operator -
        public static Vector operator -(Vector v1, Vector v2)
        {
            Vector temp = new Vector();
            temp.X_1 = (v1.X_1 - v2.X_1);
            temp.X_2 = (v1.X_2 - v2.X_2);
 
            temp.Y_1 = (v1.Y_1 - v2.Y_1);
            temp.Y_2 = (v1.Y_2 - v2.Y_2);
 
            temp.Z_1 = (v1.Z_1 - v2.Z_1);
            temp.Z_2 = (v1.Z_2 - v2.Z_2);
 
            return temp;
        }
 
        //ToString() overrides
        public override string ToString()
        {
            return string.Format("X_1: {0}\nX_2: {1}\nY_1: {2}\nY_2: {3}\nZ_1: {4}\nZ_2: {5}",
                                 X_1,X_2,Y_1,Y_2,Z_1,Z_2);
        }
    }
}
Использование
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Vector v1 = new Vector { X_1 = 10, X_2 = 15, Y_1 = 2, Y_2 = 20, Z_1 = 6, Z_2 = 19 };
            Vector v2 = new Vector { X_1 = 4, X_2 = 20, Y_1 = 9, Y_2 = 28, Z_1 = 6, Z_2 = 21 };
 
            Vector v3 = v1 + v2;
            Vector v4 = v1 - v2;
 
            Console.WriteLine("----- Sum of the vectors -----\n");
            Console.WriteLine(v3.ToString());
            Console.WriteLine("\n-----Difference of the vectors -----\n");
            Console.WriteLine(v4.ToString());
            Console.ReadLine();
        }
    }
}
1
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
28.07.2014, 13:29
А мне кажется вектору совершенно не нужно знать координаты конца и начала. Я бы сделал только три параметра: x,y,z. И еще два конструктора: 1)принимает x,y,z. 2) принимает две трехмерные точки(начало и конец вектора) из которых опять получает x,y,z.
Тогда, чтобы сложить два вектора, достаточно сложить координаты векторов, а не их концов. В 2 раза меньше вычислений.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.07.2014, 13:29
Помогаю со студенческими работами здесь

Составить описание класса для вектора, заданного координатами его концов в трехмерном пространстве
Составить описание класса для вектора, заданного координатами его концов в трех¬мерном пространстве. Обеспечить операции сложения и...

Составить описание класса для вектора, заданного координатами его концов в трехмерном пространстве
Составить описание класса для вектора, заданного координатами его концов в трехмерном пространстве. Обеспечить операции сложения и...

Описание класса для вектора
составить описание класса для вектора, заданного координатами его концов в трёхмерном пространстве. обеспечить операции сложение и...

Составить описание класса для матрицы
Составить описание класса для матрицы. Обеспечить операции сложения и вычитания двух матриц с получением новой матрицы, транспонирования...

Составить описание класса для представления даты
Составить описание класса для представления даты. Предусмотреть возможности установки даты и изменения ее отдельных полей (год, месяц,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru