Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2014, 19:06   #1
PhVG
 
Регистрация: 20.04.2011
Сообщений: 4
По умолчанию Программа работает по-разному в VS 2008 и в Code::Blocks

Помогите разобраться!
Пишу алгоритм преобразования мировых координат в координаты камеры. Пишу в VS 2008.
На определенном этапе столкнулся с нелогичным поведением программы. После безуспешных попыток разобраться попробовал эту программу запустить в Code::blocks (12.11) и, как ни странно, всё заработало как надо. Причем я пробовал в настройках ставить и gcc и ms 2005/2008 - вс по прежнему работало правильно.

Код:
//zxy
//Совмещение координатной системы камеры с мировой системой
//1 Z
	sina=camtmp[2].x/sqrt(camtmp[2].x*camtmp[2].x+camtmp[2].y*camtmp[2].y);
cosa=camtmp[2].y/sqrt(camtmp[2].x*camtmp[2].x+camtmp[2].y*camtmp[2].y);

	for(int i=1; i<=3; i++)
	{
		newx=camtmp[i].x*cosa-camtmp[i].y*sina;
		newy=camtmp[i].x*sina+camtmp[i].y*cosa;
		camtmp[i].x = newx; camtmp[i].y = newy;
	}


	for(int i=1; i<=stnum; i++)
//Вот этому циклу FOR следовало бы находиться внизу, под меткой //11 Z
//Однако в VS 2008 программа работает правильно только когда этот
//цикл не ниже следующей строчки присвоения sinb, к которой он не //имеет ни малейшего отношения. 
	{
		newx=st1[i].x*cosa-st1[i].y*sina;
		newy=st1[i].x*sina+st1[i].y*cosa;
		st1[i].x = newx; st1[i].y = newy;
	}


//2 X
	sinb=camtmp[2].z/sqrt(camtmp[2].z*camtmp[2].z+camtmp[2].y*camtmp[2].y);
	cosb=camtmp[2].y/sqrt(camtmp[2].z*camtmp[2].z+camtmp[2].y*camtmp[2].y);

	for(int i=1; i<=3; i++)
	{
		newz=camtmp[i].z*cosb-camtmp[i].y*sinb;
		newy=camtmp[i].z*sinb+camtmp[i].y*cosb;
		camtmp[i].z = newz; camtmp[i].y = newy;
	}

//3 Y
	sinc = camtmp[1].z / sqrt(camtmp[1].z*camtmp[1].z + camtmp[1].x*camtmp[1].x);
	cosc = camtmp[1].x / sqrt(camtmp[1].z*camtmp[1].z + camtmp[1].x*camtmp[1].x);

	for(int i=1; i<=3; i++)
	{
		newz = camtmp[i].z * cosc - camtmp[i].x * sinc;
		newx = camtmp[i].z * sinc + camtmp[i].x * cosc;
		camtmp[i].z = newz; camtmp[i].x = newx;
	}

//11 Z

//22 X
	for(int i=1; i<=stnum; i++)
	{
		newz = st1[i].z * cosb - st1[i].y * sinb;
		newy = st1[i].z * sinb + st1[i].y * cosb;
		st1[i].z = newz; st1[i].y = newy;
	}

//33 Y
	for(int i=1; i<=stnum; i++)
	{
		newz = st1[i].z * cosc - st1[i].x * sinc;
		newx = st1[i].z * sinc + st1[i].x * cosc;
		st1[i].z = newz; st1[i].x = newx;
	}
PhVG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа по разному работает в разных IDE revizor Общие вопросы C/C++ 3 11.06.2013 08:20
Не работает отладчик code::blocks Zyxelo Общие вопросы C/C++ 2 05.04.2012 09:29
wxWidgets+code::blocks Kill-All-N-Thrash Qt и кроссплатформенное программирование С/С++ 3 20.08.2010 05:53
Code Blocks [Ap][uTekToP] Общие вопросы C/C++ 6 23.09.2009 20:58
CODE::BLOCKS vvviperrr Софт 0 18.12.2008 19:19