Как реализовать класс Vector на массиве?
Сам реализовывал через конструктор, но нужно на массиве, вот мой код:
Код:
using System;
using System.Collections.Generic;
using System.Text;
namespace WindowsFormsApplication1
{
class Vector
{
public Vector(double x, double y, double z) //конструктор
{
X = x;
Y = y;
Z = z;
}
public double x, y, z;
public double X
{
get;
set;
}
public double Y
{
get;
set;
}
public double Z
{
get;
set;
}
public double Length //длина
{
get
{
return Math.Sqrt(X * X + Y * Y + Z * Z);
}
}
public static Vector operator *(Vector v, double r) // умножение на число
{
return new Vector(v.x * r, v.y * r, v.z * r);
}
public static Vector operator +(Vector l, Vector r) //сложение
{
return new Vector(l.X + r.X, l.Y + r.Y, l.Z + r.Z);
}
public static Vector operator -(Vector l, Vector r) //вычитание
{
return new Vector(l.X - r.X, l.Y - r.Y, l.Z - r.Z);
}
public static double operator *(Vector l, Vector r) //скалярное произведение
{
return (l.X * r.X + l.Y * r.Y + l.Z * r.Z);
}
public static double Cos(Vector l, Vector r) //косинус между векторами
{
return (l * r) / (l.Length * r.Length);
}
public static double Norma1(Vector l)
{
return Math.Max(Math.Abs(l.X), Math.Max(Math.Abs(l.Y), Math.Abs(l.Z)));
}
public static double Norma2(Vector l)
{
return Math.Abs(l.X) + Math.Abs(l.Y) + Math.Abs(l.Z);
}
public static double Norma3(Vector l)
{
return Math.Sqrt(Math.Pow(l.X, 2) + Math.Pow(l.Y, 2) + Math.Pow(l.Z, 2));
}
}
}
using System.Collections.Generic;
using System.Text;
namespace WindowsFormsApplication1
{
class Vector
{
public Vector(double x, double y, double z) //конструктор
{
X = x;
Y = y;
Z = z;
}
public double x, y, z;
public double X
{
get;
set;
}
public double Y
{
get;
set;
}
public double Z
{
get;
set;
}
public double Length //длина
{
get
{
return Math.Sqrt(X * X + Y * Y + Z * Z);
}
}
public static Vector operator *(Vector v, double r) // умножение на число
{
return new Vector(v.x * r, v.y * r, v.z * r);
}
public static Vector operator +(Vector l, Vector r) //сложение
{
return new Vector(l.X + r.X, l.Y + r.Y, l.Z + r.Z);
}
public static Vector operator -(Vector l, Vector r) //вычитание
{
return new Vector(l.X - r.X, l.Y - r.Y, l.Z - r.Z);
}
public static double operator *(Vector l, Vector r) //скалярное произведение
{
return (l.X * r.X + l.Y * r.Y + l.Z * r.Z);
}
public static double Cos(Vector l, Vector r) //косинус между векторами
{
return (l * r) / (l.Length * r.Length);
}
public static double Norma1(Vector l)
{
return Math.Max(Math.Abs(l.X), Math.Max(Math.Abs(l.Y), Math.Abs(l.Z)));
}
public static double Norma2(Vector l)
{
return Math.Abs(l.X) + Math.Abs(l.Y) + Math.Abs(l.Z);
}
public static double Norma3(Vector l)
{
return Math.Sqrt(Math.Pow(l.X, 2) + Math.Pow(l.Y, 2) + Math.Pow(l.Z, 2));
}
}
}
- Что значит "на массиве"? от Der Meister, 25 декабря 2013 года
C этим разобрался, теперь как вывести полученный вектор на экран(создал Form1.cs)?
http://www.cyberforum.ru/csharp-net/thread140219.html
А как именно реализовать, после сложения двух векторов я получил на допустим { 5 7 9} как мне эти координаты преобразовались вектор и нарисовался он в PictureBox
значит в PictureBox придётся рисовать трёхмерный вектор средствами OpenGL, ну это лично мой вариант.
Как тогда двухмерный вектор в PictureBox рисовать?
Можете скинуть код, который с массивами получился?
Например так:
Код:
#include <vector>
Код:
int main(int argc, char *argv[])
{
// какой-то массив
int a[4]={10,0,25,40};
// инициализация вектора нашим массивом
vector<int> v(a,a+4);
// теперь к вектору можно применять алгоритмы которые есть в #include <algorithm>
// или придумывать свои алгоритмы
}
{
// какой-то массив
int a[4]={10,0,25,40};
// инициализация вектора нашим массивом
vector<int> v(a,a+4);
// теперь к вектору можно применять алгоритмы которые есть в #include <algorithm>
// или придумывать свои алгоритмы
}