Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Matrix 
:(
    Опции темы
RageHunter
Дата 17.3.2013, 04:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 10.1.2008

Репутация: нет
Всего: нет



Доброе время суток.
Использую OpenTk.
там есть структура Matrix4, есть реализация оператора "*"
Код
public static void Mult(ref Matrix4 left, ref Matrix4 right, out Matrix4 result)
{
    result = new Matrix4(
        left.M11 * right.M11 + left.M12 * right.M21 + left.M13 * right.M31 + left.M14 * right.M41,
        left.M11 * right.M12 + left.M12 * right.M22 + left.M13 * right.M32 + left.M14 * right.M42,
        left.M11 * right.M13 + left.M12 * right.M23 + left.M13 * right.M33 + left.M14 * right.M43,
        left.M11 * right.M14 + left.M12 * right.M24 + left.M13 * right.M34 + left.M14 * right.M44,
        left.M21 * right.M11 + left.M22 * right.M21 + left.M23 * right.M31 + left.M24 * right.M41,
        left.M21 * right.M12 + left.M22 * right.M22 + left.M23 * right.M32 + left.M24 * right.M42,
        left.M21 * right.M13 + left.M22 * right.M23 + left.M23 * right.M33 + left.M24 * right.M43,
        left.M21 * right.M14 + left.M22 * right.M24 + left.M23 * right.M34 + left.M24 * right.M44,
        left.M31 * right.M11 + left.M32 * right.M21 + left.M33 * right.M31 + left.M34 * right.M41,
        left.M31 * right.M12 + left.M32 * right.M22 + left.M33 * right.M32 + left.M34 * right.M42,
        left.M31 * right.M13 + left.M32 * right.M23 + left.M33 * right.M33 + left.M34 * right.M43,
        left.M31 * right.M14 + left.M32 * right.M24 + left.M33 * right.M34 + left.M34 * right.M44,
        left.M41 * right.M11 + left.M42 * right.M21 + left.M43 * right.M31 + left.M44 * right.M41,
        left.M41 * right.M12 + left.M42 * right.M22 + left.M43 * right.M32 + left.M44 * right.M42,
        left.M41 * right.M13 + left.M42 * right.M23 + left.M43 * right.M33 + left.M44 * right.M43,
        left.M41 * right.M14 + left.M42 * right.M24 + left.M43 * right.M34 + left.M44 * right.M44);
}

но нет реализации оператора "+" и "-".
Вопрос. Честно я эти матрицы вообще не понимаю.
Для создания операторов "+" и "-" достаточно ли будет заменить "*" на них, или все намного хитрее? 

PM MAIL   Вверх
DarkDragon
Дата 17.3.2013, 07:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GradVin
**


Профиль
Группа: Участник
Сообщений: 296
Регистрация: 19.8.2006

Репутация: нет
Всего: 8



Цитата(RageHunter @  17.3.2013,  04:34 Найти цитируемый пост)
Для создания операторов "+" и "-" достаточно ли будет заменить "*" на них, или все намного хитрее? 
 smile Я бы сказал что наоборот. Сложение и вычитание выполняется по компонентно, а это значить что:

m1 = m2 + m3:
Код

m1.M11 = m2.M11 + m3.M11;
...
m1.M44 = m2.M44 + m3.M44;


m1 = m2 - m3:
Код

m1.M11 = m2.M11 - m3.M11;
...
m1.M44 = m2.M44 - m3.M44;

PM MAIL   Вверх
RageHunter
Дата 17.3.2013, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 10.1.2008

Репутация: нет
Всего: нет



DarkDragon, я Вас правильно понял?

Код
public static void Plus(ref Matrix4 left, ref Matrix4 right, out Matrix4 result)
{
    result = new Matrix4(
    left.M11 + right.M11,
    left.M12 + right.M12,
    left.M13 + right.M13,
    left.M14 + right.M14,
    left.M21 + right.M21,
    left.M22 + right.M22,
    left.M23 + right.M23,
    left.M24 + right.M24,
    left.M31 + right.M31,
    left.M32 + right.M32,
    left.M33 + right.M33,
    left.M34 + right.M34,
    left.M41 + right.M41,
    left.M42 + right.M42,
    left.M43 + right.M43,
    left.M44 + right.M44);
}

public static void Minus(ref Matrix4 left, ref Matrix4 right, out Matrix4 result)
{
    result = new Matrix4(
    left.M11 - right.M11,
    left.M12 - right.M12,
    left.M13 - right.M13,
    left.M14 - right.M14,
    left.M21 - right.M21,
    left.M22 - right.M22,
    left.M23 - right.M23,
    left.M24 - right.M24,
    left.M31 - right.M31,
    left.M32 - right.M32,
    left.M33 - right.M33,
    left.M34 - right.M34,
    left.M41 - right.M41,
    left.M42 - right.M42,
    left.M43 - right.M43,
    left.M44 - right.M44);
}


Спасибо за помощь.

Это сообщение отредактировал(а) RageHunter - 17.3.2013, 13:59
PM MAIL   Вверх
DarkDragon
Дата 17.3.2013, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GradVin
**


Профиль
Группа: Участник
Сообщений: 296
Регистрация: 19.8.2006

Репутация: нет
Всего: 8



RageHunter, да, все верно.
PM MAIL   Вверх
RageHunter
Дата 20.3.2013, 03:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 10.1.2008

Репутация: нет
Всего: нет



Еще вопросик!
не стал создавать нову тему.
в с++ есть строка
Код

if(poles & ( 1 << ( pole_y/2 * 4 + pole_x/2 ))
     ........................

но C# ругается на такую стороку "Неявное преобразование типа "long" в "bool" невозможно"
Вопросик, как можно это же переписать под С#.
Прокатит?
Код

if((poles & ( 1 << ( pole_y/2 * 4 + pole_x/2 )) > 0)


Это сообщение отредактировал(а) RageHunter - 20.3.2013, 04:04
PM MAIL   Вверх
DarkDragon
Дата 20.3.2013, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GradVin
**


Профиль
Группа: Участник
Сообщений: 296
Регистрация: 19.8.2006

Репутация: нет
Всего: 8



тогда наверно лучше так:
Код

if((poles & ( 1 << ( pole_y/2 * 4 + pole_x/2 )) != 0)

true - все что не ноль
false - только ноль
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0733 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.