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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2011, 14:41   #1
kukumumu
 
Регистрация: 28.12.2010
Сообщений: 7
По умолчанию c++ проблемы с тригонометрическими функциями

Здравствуйте! изучаю азы c++. пишу программу, которая складывает полярные координаты. результаты удивляют.
специально для отладки навводила переменных в перегруж. операцию + (см. строчки выделенные болтом) - угол (свойство angle) равен 30 - а переменная t1 равна в результате, после того, как пройдем строчку t1=sin(angle) - -0.923421 (что-то вроде этого!) в чем тут дело, подскажите, пожалуйста!
и еще почему-то не отображается символ \x09
подразумевалось, что это будет кружочек - знак градусов
Код:
//не поминайте лохом

//полярные координаты
#include <iostream>
using namespace std;
#include <conio.h>
#include <math.h>

class polar
{
private:
	double angle,radius;
public:
	polar(double a, double r):angle(a), radius(r)
	{
		if(angle>360)
			{cout<<"\nnon correct angle!\n";exit(1);}
	}
	polar():angle(0),radius(0)
	{}
	polar operator+(polar p1)
	{
		double x1,y1,x2,y2,x3,y3,t1,t2;
		polar p2;
		x1=sin(angle)*radius;
		t1 = sin(angle);
		t2 = asin(t1);
		y1=cos(angle)*radius;
		x2=sin(p1.angle)*p1.radius;
		y2=cos(p1.angle)*p1.radius;
		x3 = x1+x2;
		y3 = y1+y2;
		p2.radius = pow((x3*x3+y3*y3),0.5);
		p2.angle = asin(p2.radius/x3);
		return p2;

	}

	void display()
	{
		cout<<angle<<"\x09"<<radius<<"cm";
	}
};
int main()
{
	char ch;
	double a,r;
	polar p1(30,10);


	do
	{
		cout<<"\nEnter angle and radius ";
		cin>>a>>r;
		polar p2(a,r);
		polar p3 = p1+p2;
		p1.display();cout<<"+";p2.display();cout<<"=";p3.display();
		cout<<"\ncontinue?(y/n) ";
		ch = _getche();
	}
	while (ch!='n');
	cout<<endl;

	return 0;
}

Последний раз редактировалось Stilet; 02.04.2011 в 16:17.
kukumumu вне форума Ответить с цитированием
Старый 02.04.2011, 16:17   #2
Ирина Сергеевна
Пользователь
 
Регистрация: 20.05.2009
Сообщений: 17
По умолчанию

Во-первых, если у Вас x1 - это абсцисса, то она определяется как произведение радиуса на косинус угла angle (ордината y1, соответственно, через синус).
Во-вторых, аргумент функции sin() по умолчанию должен быть задан в радианах, поэтому возвращаемое значение у Вас и получилось большим и отрицательным.
В-третьих, знак градуса, по-моему, "\u00b0".
Дерзайте
The impossible is possible, if you really want..
Ирина Сергеевна вне форума Ответить с цитированием
Старый 02.04.2011, 16:19   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
в чем тут дело, подскажите, пожалуйста!
В радианах. Всмысле ты же не забыла переводить из радиан в привычные человеку градусы?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.04.2011, 18:26   #4
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

радианы = пи в нашей с вами общепринятой форме 3.14 = 180 градусов, следовательно, чтобы перевести из градусов в радианы, надо умножить это число на pi и поделить на 180,и наоборот, чтобы перевести из радиан в градусы - надо умножить на 180 и поделить на pi
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Старый 02.04.2011, 18:28   #5
kukumumu
 
Регистрация: 28.12.2010
Сообщений: 7
По умолчанию

спасибо всем большое! так и знала, что что-то с градусами, а про радианы совсем забыла )
kukumumu вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с функциями(С++) Scarletred Помощь студентам 5 06.04.2010 13:29
РАБОТА С ФУНКЦИЯМИ В С++ серг Помощь студентам 4 03.03.2010 22:26
Подскажите с функциями Mikimaus Общие вопросы C/C++ 1 16.11.2009 12:58
Помогите с функциями lebrosha Помощь студентам 5 28.05.2009 20:57
проблема с функциями world12_tk Помощь студентам 6 03.03.2009 19:34