Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 17.02.2006, 13:39   #1
Платон
Нуждающийся
 
Регистрация: 09.11.2005
Сообщений: 69
Написано одно полезное сообщение
сабж. Чето ненашел таких функций. Самому писать что-ли?
(Offline)
 
Ответить с цитированием
Старый 17.02.2006, 13:58   #2
Платон
Нуждающийся
 
Регистрация: 09.11.2005
Сообщений: 69
Написано одно полезное сообщение
Вопрос вдогонку:

есть два класса, и в обоих есть методы параметрами которых являются указатели на эти классы. Как мне описать эти методы?
Например
class A
{
 * * public:
 * * float ax;

 * * void method(B *x);
};

class B
{
 * * public:
 * * float bx;

 * * void method(A *x);
}
Как видно, в классе A описан метод с параметром указателем на класс B, что вызовет ошибку так как класс B декларирован позже. Как быть?
(Offline)
 
Ответить с цитированием
Старый 17.02.2006, 14:16   #3
Платон
Нуждающийся
 
Регистрация: 09.11.2005
Сообщений: 69
Написано одно полезное сообщение
Еще один вопрос
Как перемножить не две, а три или больше матриц? Так же как и две - "строка на столбец" первых двух, а потом "строка на столбец" получившейся матрицы и третьей и т.д?
(Offline)
 
Ответить с цитированием
Старый 17.02.2006, 16:41   #4
Платон
Нуждающийся
 
Регистрация: 09.11.2005
Сообщений: 69
Написано одно полезное сообщение
Первый вопрос закрыт, интересует больше второй вопрос.
(Offline)
 
Ответить с цитированием
Старый 17.02.2006, 16:53   #5
Maxus
ПроЭктировщик
 
Регистрация: 17.02.2006
Сообщений: 144
Написано 13 полезных сообщений
(для 36 пользователей)
Originally posted by Платон@17.2.2006, 14:16
Еще один вопрос
Как перемножить не две, а три или больше матриц? Так же как и две -* "строка на столбец" первых двух, а потом "строка на столбец" получившейся матрицы и третьей и т.д?
Очень просто:
include "d3dx8math.h"
include "D3d8types.h"

D3DMATRIX m1
D3DMATRIX m2
D3DMATRIX m3
D3DMATRIX m4

D3DXMatrixMultiply(m3,m1,m2)
D3DXMatrixMultiply(m4,m3,m4)
И в m4 получаем результат перемножения 4-х матриц.
(Offline)
 
Ответить с цитированием
Старый 17.02.2006, 17:08   #6
Платон
Нуждающийся
 
Регистрация: 09.11.2005
Сообщений: 69
Написано одно полезное сообщение
Нет Maxus, мне нужно ручное перемножение матриц. С подключеными модулями и я смогу перемножить
Вобщем сделал последовательное перемножение, пофиг на этот вопрос.

Остался самый интересный - второй.
Может с помощью прототипа как-нибудь?
(Offline)
 
Ответить с цитированием
Старый 17.02.2006, 17:56   #7
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
1)преобразование типов:
float a;
int x=int(a);
//или просто int x=a;
;
и по аналогии.
2) матрицы перемножать последователно в строгом порядке: 1 на 2, результат 12 на 3 и т.д.
примерно так
//created by impersonalis 
//b00lean team (http://community.boolean.name/)

//библиотека матриц


template <class abstr>
class matrix{
private:
	unsigned StringSize;
	unsigned CSize;
	abstr *buffer;
public:
	matrix<abstr> (unsigned size,unsigned size2=0);//стандартный конструктор
	matrix<abstr> (unsigned NS,unsigned NC,const matrix &M);//минор (0,0,X - полностью копирует матрицу Х в создаваемую)
	matrix<abstr> (char filename[]);//загрузка из файла
	matrix<abstr> ();//дефолтный конструктор
	~matrix();//деструктор
	void in(unsigned SNumber,unsigned CNumber,abstr Z);//ввод
	abstr out(unsigned SNumber,unsigned CNumber)const;//вывод
	abstr determinant()const;//определитель
	abstr Ajk(unsigned NS,unsigned NC)const;//(-1)^(j+k)*|Minor|
	void transp(const matrix &M);//транспонирование
	bool invert(const matrix &M);//инвертирование
	abstr IstrJcol(const matrix &M,unsigned I,unsigned J)const;//перемножение строка*столбец
	void operator*(abstr Z);//умножение на коэффициент
	void MNOG(const matrix &M1,const matrix &M2);//пермножение матриц

	friend ostream & operator <<(ostream &out,const matrix &M);//вывод матрицы в поток в формате HTML-4 как таблицы
	void ShowMessage();//генерация виндозной форточки с матрицей
};

template <class abstr>
matrix<abstr>::matrix(unsigned size,unsigned size2){
	StringSize=size;
	CSize=size2;
	if (CSize==0){CSize=StringSize;}
	unsigned index=(CSize-1)*StringSize+StringSize;
	buffer=new abstr[index];
}

template <class abstr>
abstr matrix<abstr>::IstrJcol(const matrix &M,unsigned I,unsigned J)const{
	abstr z=0;
	for(unsigned k=1;k<=StringSize;k++){
 abstr az=out(I,k);
 abstr bz=M.out(k,J);
 z=z+az*bz;
	}
	return z;
}

template <class abstr>
void matrix<abstr>::MNOG(const matrix &M1,const matrix &M2){
	//самодомножение a=a*b
	if(&M1==this){
 
 matrix <abstr>E(0,0,M1);
 MNOG(E,M2);
 return;
	}
	//самодомножение a=c*a
	if(&M2==this){
 
 matrix <abstr>E(0,0,M2);
 MNOG(M1,E);
 return;
	}

	if(StringSize+CSize!=0){
 delete []buffer;
	}
//	
	StringSize=M2.StringSize;
	CSize=M1.CSize;
	unsigned index=(CSize-1)*StringSize+StringSize;
	buffer=new abstr[index];
//
	for(unsigned i=1;i<=M1.CSize;i++){
 for(unsigned j=1;j<=M2.StringSize;j++){
 	in(i,j,M1.IstrJcol(M2,i,j));
 }
	}
}
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 17.02.2006, 18:01   #8
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Смущение

Может с помощью прототипа как-нибудь?
именно!
class B;
//class A;

class A
{
 * *public:
 * *float ax;

 * *void method(B *x);
};

class B
{
 * *public:
 * *float bx;

 * *void method(A *x);
};

void main(){
}
должно работать
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 17.02.2006, 18:22   #9
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Смущение

Куда более интересно преобразование чисел в строку и обратно. Для этого юзаем фунЕции:
//целые числа
itoa(исходное_число,строка_приёмник,основание_системы);
x=atoi(строка_с_числом);
//дробные:
функции перевода в строку не нашёл
x=atof(строка_с_числом);
;
Эти функции хранятся в stdlib.h
Реализацию dtoa накодил кое-как сам (есть ещё один алгоритм, но он "таинственным" образом переполняет стек; вариант ниже более устойчив):
short get_byte(double x,int p,int R){
	x=fabs(x);
	int n=R-p+1;
	short a;
	if(p>0)
 *a=int((x-int(x/pow(10,n))*pow(10,n))/pow(10,n-1 ));
	else if(p<0)
 *a=int(x*pow(10,-p))%10;
	else
 *a=-1;
	return a;
}

short get_Rlen(double x){
	char a[20];
	itoa(x,a,10);
	return strlen(a)-(x<0?1:0);
}

void dtoa(double x,char t[],int z=10,int omega=5){
	short R=get_Rlen(x);
	char b[2];
	int i;
	int j=0;
	if(x<0){
 *x=fabs(x);
 *t[0]='-';
 *j++;
	}
	for(i=1;i<=R;i++){
 *short p=get_byte(x,i,R);
 *itoa(p,b,10);
 *b[1]=0;
 *t[j]=b[0];
 *j++;
	}
	t[j]='.';
	j++;
	for(i=-1;i>=-omega;i--){
 *short p=get_byte(x,i,R);
 *itoa(p,b,10);
 *b[1]=0;
 *t[j]=b[0];
 *j++;
	}
	t[j]=0;
}
void dtoa(double x,char t[],int z=10,int omega=5)
работает по аналогии со встроенными функциями:
x - входное_число
t - строка-приёмник
z - добавлено для совместимости ( так быстрее править код, к примеру itoa на dtoa)
omega- точность
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 17.02.2006, 18:57   #10
Платон
Нуждающийся
 
Регистрация: 09.11.2005
Сообщений: 69
Написано одно полезное сообщение

Спасибо большое impersonalis
Но я все равно в твоем коде неразберусь
У меня все попроще )
(Offline)
 
Ответить с цитированием
Старый 17.02.2006, 19:11   #11
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Всегда пожалуйста =)
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Lib_dbl : java double support Piligrim Библиотеки 7 25.02.2013 23:59
Перевод impersonalis Болтовня 4 16.12.2008 00:49
Double Content Finder impersonalis Болтовня 0 04.10.2007 15:22
in the army, перевод jimon Юмор 2 01.09.2006 00:07


Часовой пояс GMT +4, время: 15:47.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com