Russian Qt Forum

Qt => Общие вопросы => Тема начата: Hank0098 от Июнь 10, 2013, 22:18



Название: Программа с векторами. Помогите доделать.
Отправлено: Hank0098 от Июнь 10, 2013, 22:18
Есть программа, которая выполняет действия с векторами на плоскости(умножение, вычитание, суммирование), При этом графически все отображает(рисует вектора). Проблема в том, что вектору (направленная прямая, которая состоит из двух точек, начала и конца) можно задать только его конец, т.е начало вектора всегда точка с координатами (0;0), а задать можно только точку конца вектора.

Помогите пожалуйста, отблагодарю, не обижу ::)

ссылка на прогу:
http://www.ex.ua/view/62510997


Название: Re: Программа с векторами. Помогите доделать.
Отправлено: mutineer от Июнь 10, 2013, 22:23
так а с чем помочь?

З.Ы. перепакуй файл в zip


Название: Re: Программа с векторами. Помогите доделать.
Отправлено: Hank0098 от Июнь 10, 2013, 22:59
файл открывается любым архиватором

добавь в скайпе

girya88


Название: Re: Программа с векторами. Помогите доделать.
Отправлено: Bepec от Июнь 10, 2013, 23:01
Ух ты, новый стандарт видимо придумал гений :) любым архиватором открыть можно :D


Название: Re: Программа с векторами. Помогите доделать.
Отправлено: Hank0098 от Июнь 11, 2013, 00:22
теперь в .rar


Название: Re: Программа с векторами. Помогите доделать.
Отправлено: Hank0098 от Июнь 11, 2013, 02:16
нужно сделать, что бы вектору можно было задать две точки, а не одну только. Посмотри саму программу.


Название: Re: Программа с векторами. Помогите доделать.
Отправлено: mutineer от Июнь 11, 2013, 08:35
Как минимум нужно классу Vector добавить еще один QPoint (точку начала) и адаптировать все методы на работу с двумя точками


Название: Re: Программа с векторами. Помогите доделать.
Отправлено: Hank0098 от Июнь 11, 2013, 09:25
кто сможет это сделать, добавляйте в скайпе. Обсудим все.


Название: Q
Отправлено: Fregloin от Июнь 11, 2013, 10:41
мда, изначально в проекте у вас полагалось что вектор исходит из центра координат.
ничего сложного не вижу в реализации, добавьте еще одну точку (начальную), и перепишите логику вычислений.
подсказка, в библиотеке Qt есть работа с векторами.


Название: Re: Программа с векторами. Помогите доделать.
Отправлено: Igors от Июнь 11, 2013, 10:49
нужно сделать, что бы вектору можно было задать две точки, а не одну только. Посмотри саму программу.
Написано аккуратно, но классы построены неудачнно.
Код
C++ (Qt)
class Vector {
...
private:
   QPoint direction;
   size_t size;
   QColor color;
};
 
Вектор - хорошо известное понятие, это просто массив значений. Хотя вектор и точка - разные "сущности", но по данным они неотличимы, поэтому на мой взгляд хорошо определить вектор так
Код
C++ (Qt)
typedef Vector2D QPoint;
 
Ну или воспользоваться готовым классом QVector2D. Члены size и color никакого отношения к вектору не имеют, да и size не целое число. Для операций с парой точек нужен др класс напр
Код
C++ (Qt)
class Line {
..
QPoint p0, p1;
QColor color;
};
Или в духе птенцов ассыстента
Код
C++ (Qt)
class ColorLine : public QLine {
..
QColor color;
};
Конечно Вы можете сказать "а вот мне нужен такой вектор" (переделывать не хочется). Ну как, можно свинью назвать коровой, но она не станет давать молоко  :)


Название: Re: Программа с векторами. Помогите доделать.
Отправлено: mutineer от Июнь 11, 2013, 10:55
Вектор - хорошо известное понятие, это просто массив значений. Хотя вектор и точка - разные "сущности", но по данным они неотличимы

А как насчет особенностей предметной области?

Цитировать
Вектор в планарной евклидовой геометрии (связанный вектор) — упорядоченная пара точек, одна из которых называется началом, вторая — концом вектора.


Название: Re: Программа с векторами. Помогите доделать.
Отправлено: Igors от Июнь 11, 2013, 11:22
А как насчет особенностей предметной области?

Цитировать
Вектор в планарной евклидовой геометрии (связанный вектор) — упорядоченная пара точек, одна из которых называется началом, вторая — концом вектора.
А кто Вас заставляет делать "связанный"? :) Какие разумные операции над ним возможны? Напр как Вы будете складывать/вычитать такие вектора? Бросать exception если точки не совпадают :) Переопределяя известное понятие по-другому Вы наживаете кучу совершенно ненужных забот. 


Название: Re: Программа с векторами. Помогите доделать.
Отправлено: mutineer от Июнь 11, 2013, 11:30
Так, стоп, ты сказал что вектор это массив значений и все. И от точки он данными не отличается. Но в случае евклидовой геометрии это малость не так, там вектор это пара точек

К тому же
Цитировать
Результатом операций со связанными векторами принимается вектор, начальная точка которого совпадает с начальной точкой первого слагаемого при сложении векторов

Если точки не совпадают, то второе слагаемое можно просто перенести в нужную точку. Вычитание реализуется через сложение.


Название: Re: Программа с векторами. Помогите доделать.
Отправлено: Hank0098 от Июнь 11, 2013, 11:52
так кто сможет мне помочь с решением этой проблемы?


Название: Re: Программа с векторами. Помогите доделать.
Отправлено: Igors от Июнь 11, 2013, 12:23
Так, стоп, ты сказал что вектор это массив значений и все. И от точки он данными не отличается. Но в случае евклидовой геометрии это малость не так, там вектор это пара точек
Это в точности так. Все что написано для векторов в Qt, std:: и еще в десятках мест - все это чисто Евклидова геометрия, для другой (напр на сфере) это работать не будет.
Цитировать
3 + 1 = 4 ?
Неверно, потому что 4 - это дважды два!
В действительности и то и то - Евклидова геометрия, просто представление вектора в виде 2 точек неудачно, ну так никто и не делает
Если точки не совпадают, то второе слагаемое можно просто перенести в нужную точку.
Тогда a + b != b + a. Зачем городить такую фигню?


Название: Re: Программа с векторами. Помогите доделать.
Отправлено: Hank0098 от Июнь 11, 2013, 17:15
Меня вообще кто нибудь слышит?? ;D


Название: Re: Программа с векторами. Помогите доделать.
Отправлено: kamre от Июнь 11, 2013, 19:55
Но в случае евклидовой геометрии это малость не так, там вектор это пара точек.
...
Если точки не совпадают, то второе слагаемое можно просто перенести в нужную точку. Вычитание реализуется через сложение.
Вектор - это прежде всего элемент векторного пространства. А для множества всех пар точек n-мерного евклидова пространства нельзя ввести операции так, чтобы оно соответствовало векторному пространству Rn. Вот если на множестве пар точек ввести отношение эквивалентности, такое что пары эквиваленты <=> отличаются только параллельным переносом, то на классах эквивалентности уже можно ввести нужные операции.


Название: Re: Программа с векторами. Помогите доделать.
Отправлено: Maestro от Июнь 12, 2013, 02:20
Решение этой задачи займет 20-30 строк. Зачем вы виписываете интерфейс вручную? ???