Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
No10
30 / 28 / 2
Регистрация: 03.06.2010
Сообщений: 465
#1

Произведение векторов - C++

14.01.2013, 22:22. Просмотров 407. Ответов 4
Метки нет (Все метки)

Вот написал функцию которая должа умножать вектора(находить нормаль):
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
#include <iostream>
 
using namespace std;
 
class TVector
{
    friend TVector ABVec(TVector, TVector);
 
    public:
 
    TVector(float _x, float _y, float _z)
    {
        x = _x;
        y = _y;
        z = _z;
    }
 
    void print(void) {std::cout << "(" << x << ", " << y << ", " << z << ")";}
 
    private:
 
    float x;
    float y;
    float z;
};
 
TVector ABVec(TVector a, TVector b) //считаем
{
    return TVector(a.z * b.y - a.y * b.z,
                   a.x * b.z - a.z * b.x,
                   a.y * b.x - a.x * b.y);
}
 
int main()
{
    TVector v1(50, 0, 0);
    TVector v2(0, 0, 50);
    ABVec(v1, v2).print();
    return 0;
}
Но один минус, вектор должен быть ЕДИНИЧНЫМ, так сказано и в википедии,
если он единичные значит его длина равна 1.
Но почему у меня в ответе вектор длиной (0,2500,0)
Вроде он должен быть длиной вверх всего 1, тоесть (0, 1, 0).
Скажите в чём моя ошибка и что я не понял?

Добавлено через 3 минуты
Меня реально подкосили знания математики, пишу программы легко, но вот математика... с пониманием проблема. Надеюсь на вашу помощь, я и так заплутал в учебниках по Стереометрии.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2013, 22:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Произведение векторов (C++):

Вычислить произведение векторов - C++
Всем доброго времени суток! Нужно решить одну сложную (для меня) задачу на си. Завтра сдавать работу надо в универ, я все сделал кроме...

Скалярное произведение векторов - C++
Здравствуйте! Помогите пожалуйста найти ошибки #include &lt;iostream&gt; using namespace std; int main(int argc, char *argv) { ...

Скалярное произведение векторов - C++
Объясните, пожалуйста, значение вот этой строки: int scalar(int V1, int V2, int n)

Создать класс для обработки векторов разность векторов норму векторов - C++
Создать класс для обработки векторов разность векторов норму векторов

Найти скалярное произведение векторов - C++
Даны два вектора x, y есть Rn. Найти скалярное произведение векторов.

Найти скалярное произведение векторов - C++
нужно написать две программы 1) нахождение скалярного произведения векторов 2) вычисление...

4
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
14.01.2013, 22:24 #2
No10, я так понимаю вектора перед умножением надо нормализовать.
1
No10
30 / 28 / 2
Регистрация: 03.06.2010
Сообщений: 465
14.01.2013, 22:32  [ТС] #3
Я работал с формулой A*B = (Az*By - Ay*Bz, Ax*Bz - Az*Bx, Ay*Bx - Ax*By)

Добавлено через 2 минуты
ВОТ!!!
gray_fox, Нормализация, это что за процесс?
В OpenGL вроде нормализация векторов glEnable(GL_NORMALIZE);
или glEnable(GL_RESCALE_NORMALS);
Но я не знаю как в частности работают эти функции.

Добавлено через 3 минуты
ага, нормализация это когда вектора превращаются в единичные?
В моём случае
(50, 0, 0) = (1, 0, 0)
(0, 0, 50) = (0, 0, 1)

gray_fox, спасибо, прям глоток свежего воздуха дал
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
14.01.2013, 22:35 #4
Цитата Сообщение от No10 Посмотреть сообщение
gray_fox, Нормализация, это что за процесс?
Грубо говоря приведение к единичной длине.

Добавлено через 29 секунд
А ну ты сам уже понял)

Добавлено через 1 минуту
Что бы нормализовать - делишь каждую компоненту вектора на его длинну.
1
Igor3D
965 / 498 / 50
Регистрация: 01.10.2012
Сообщений: 2,490
14.01.2013, 22:38 #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
TVector Cross( const TVector & a, const TVector & b ) 
{
    return TVector(a.y * b.z - a.z * b.y,
                   a.z * b.x - a.х * b.z,
                   a.x * b.y - a.y * b.x);
}
 
float TVector::Length( void ) const
{
 return sqrt(x * x + y * y + z * z);
}
 
TVector TVector::Normalized( void ) const
{
 float len = Length();
 return TVector(x / len, y / len, z / len);
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2013, 22:38
Привет! Вот еще темы с ответами:

[Геометрия]Скалярное произведение векторов - C++
Добрый день. Есть вот такая задача: Я написал программу, но не уверен верно ли написал. #include &lt;iostream.h&gt;

Найти скалярное произведение векторов - C++
Помогите пожалуйста, у самой никак не получается, надо написать программу на С++. Даны координаты двух n-мерных векторов A(a1; a2;..; an)...

Скалярное произведение двух векторов - C++
Даны два вектора (одномерных массива), содержащих n вещественных элементов. Найти скалярное произведение двух векторов.

Распараллелить скалярное произведение векторов - C++
Задание - распараллелить скалярное произведение векторов. вектора vec1 и vec2 заполняются не рандомом для однозначности результата. ...


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
14.01.2013, 22:38
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru