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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
Alex1991
1 / 1 / 0
Регистрация: 03.12.2008
Сообщений: 34
#1

Нужно вставить в прогу правильную формулу(С++) - C++

27.06.2009, 23:55. Просмотров 1894. Ответов 23
Метки нет (Все метки)

Привет всем)) Помогите пожалуйста вставить в прогу правильную формулу.
Вот сама задача:
Должны быть реализованные подпрограммы рисования дуги круга заданной:
координатами центра, координатами стартовой точки и величиной угла

вот сам код проги:
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
#include <graphics.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>
double rad(double f)
{
  return 180*f/3.14159265358979;
}
 
void Build(int x,int y,int x1,int y1,int f)
{
  double r=sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));
  int gd=DETECT,gm=0;
  initgraph(&gd,&gm,"D:\\TC\\BGI");
  double y2=y1-y;
  double fi=(y2/r);
  double fs=rad(sinh(fi)); //препод сказал вот здесь у меня ошибка(а именно не та формула)
  if (x<=x1 && y<=y1) fs=fs; else
  if (x<x1 && y>y1) fs=270+fs; else
  if (x>x1 && y<y1) fs=90+fs;     else
  fs=180+fs;
  arc(x,y,fs,f+fs,r);
}
 
int main()
{
printf("Write center coord "); int x,y; scanf("%d %d",&x,&y);
printf("Write start coord "); int x1,y1; scanf("%d %d",&x1,&y1);
printf("Write angle "); int f; scanf("%d",&f);
clrscr();
Build(x,y,x1,y1,f);
getch();
return 0;
}
Он обьяснил что нужно делать так:
Стартовый угл: atan 2 (y-y1,x-x1)
Конечный угл: стартовый + угл поворота

Как это сделать??Заранее спасибо!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2009, 23:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нужно вставить в прогу правильную формулу(С++) (C++):

Нужно вставить формулу в программу - C++
y= \begin{cases} ln\left(-x \right) &amp; \text{ , } x \lt 1 \\ -\sqrt{1-x^2} &amp; \text{ , } -1 \le x \le 1 \\ ln\left(x \right) &amp; \text{...

Кто знает как исправить формулу и запустить прогу - C++
Привет всем, помогите пожалуйста записать правильно формулу.. я записал как знал.. но оно *материться* битый час туплю.. не знаю что...

Сколько нужно убрать из данной последовательности скобок, чтобы получить правильную последовательность? - C++
Сколько надо убрать скобок из данной последовательности скобок что бы получить правильную последовательность?

даны 2 последовательности в файлах, в двух разных, нужно их обьединить и отсортировать по возрастанию. Но нужно сделать прогу с помошью указателей - C++
вот текст проги которую я сделал, но без указателей. переделайте пожалуйста #include&lt;fstream.h&gt; #include&lt;iostream.h&gt; void main(){ ...

Нужно подредактировать прогу - C++
В файле myfile.txt содержится информация типа а= 1,0; b = 5; с = 25,2; d = -l2,5. Написать функцию, которая получает строку типа «а + b =...

Нужно переделать прогу! - C++
Нужно переписать код, чтобы не было меток)))) #include&lt;math.h&gt; #include&lt;stdio.h&gt; #include&lt;alloc.h&gt; #include&lt;conio.h&gt; ...

23
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
28.06.2009, 06:14 #2
о, и тут пропало, где рекомендовали заменить sinh на sin
0
Alex1991
1 / 1 / 0
Регистрация: 03.12.2008
Сообщений: 34
28.06.2009, 17:39  [ТС] #3
Цитата Сообщение от accept Посмотреть сообщение
о, и тут пропало, где рекомендовали заменить sinh на sin
Та знаю что рекомендовали но это было неправильно
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
29.06.2009, 09:23 #4
тут формула тангенса на графике, арктангенс вычисляет угол, из которого выведен тангенс
0
Миниатюры
Нужно вставить в прогу правильную формулу(С++)  
Невик
3 / 3 / 1
Регистрация: 23.01.2009
Сообщений: 18
29.06.2009, 10:46 #5
Замени гиперболический синус на обычный
0
Alex1991
1 / 1 / 0
Регистрация: 03.12.2008
Сообщений: 34
29.06.2009, 15:00  [ТС] #6
Цитата Сообщение от Невик Посмотреть сообщение
Замени гиперболический синус на обычный
А ты не мог бы кодом показать
0
Невик
3 / 3 / 1
Регистрация: 23.01.2009
Сообщений: 18
29.06.2009, 15:04 #7
double fs=rad(sin(fi)); вместо double fs=rad(sinh(fi));
0
Alex1991
1 / 1 / 0
Регистрация: 03.12.2008
Сообщений: 34
29.06.2009, 21:41  [ТС] #8
Цитата Сообщение от Невик Посмотреть сообщение
double fs=rad(sin(fi)); вместо double fs=rad(sinh(fi));
Спасибо но это мне уже предлагали, это не правильный ответ
0
Невик
3 / 3 / 1
Регистрация: 23.01.2009
Сообщений: 18
29.06.2009, 22:21 #9
Цитата Сообщение от Alex1991 Посмотреть сообщение
Спасибо но это мне уже предлагали, это не правильный ответ
Вообще убери синус. В rad() подставляется угол, а не его синус.
0
Alex1991
1 / 1 / 0
Регистрация: 03.12.2008
Сообщений: 34
29.06.2009, 22:40  [ТС] #10
походу нужно так збацать
C++
1
2
3
4
5
6
7
8
void Build(int x,int y,int x1,int y1,int f)
{
  double r=sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));
  int gd=DETECT,gm=0;
  initgraph(&gd,&gm,"D:\\TC\\BGI");
  double fs=rad(atan2(y-y1,x1-x));
  arc(x,y,fs,f+fs,r);
}
и я неправ ??
0
Невик
3 / 3 / 1
Регистрация: 23.01.2009
Сообщений: 18
29.06.2009, 22:49 #11
Правильно double fs=rad(abs(atan(y/x)-atan(y1/x1)));
0
Alex1991
1 / 1 / 0
Регистрация: 03.12.2008
Сообщений: 34
29.06.2009, 23:35  [ТС] #12
Всмысле так ??
C++
1
2
3
4
5
6
7
8
void Build(int x,int y,int x1,int y1,int f)
{
  double r=sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));
  int gd=DETECT,gm=0;
  initgraph(&gd,&gm,"D:\\TC\\BGI");
  double fs=rad(abs(atan(y/x)-atan(y1/x1)));
  arc(x,y,fs,f+fs,r);
}
0
Невик
3 / 3 / 1
Регистрация: 23.01.2009
Сообщений: 18
29.06.2009, 23:52 #13
Проверь по результату. Должно быть так.
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
30.06.2009, 03:44 #14
Код
    double fi=(y2/r);
это вообще косинус начального угла и препод тебе правильно сказал, что надо вычислить арктангенс для того, чтобы найти начальный угол
или же тогда арккосинус вот этого значения
ты находишь альфа, а потом к альфе прибавляешь угол, который у тебя дан
и смысл этого в том, чтобы сделать
C
1
void far _Cdecl arc(int __x, int __y, int __stangle, int __endangle, int __radius);
то есть
C
1
    arc(Ox, Oy, альфа, альфа+который_дан, r);
откуда у тебя там радианы ?

если у тебя угол дан в радианах, то формула градусы = угол/PI*180
формулу проверил - у тебя правильная
C
1
2
3
4
double radtograd(double frad)
{
    return 180*frad/M_PI;
}
и чего ты тут вот намудрил
Код
    double fs = rad(atan2(y-y1, x1-x));
    arc(x, y, fs, f+fs, r);
угол посчитал правильно а подставил его вообще глючно, какое f ?

надо вот так
C
1
    arc(x, y, fs, fs+f, r);
так оно не просто красивее, оно понятнее
0
Alex1991
1 / 1 / 0
Регистрация: 03.12.2008
Сообщений: 34
30.06.2009, 04:14  [ТС] #15
Цитата Сообщение от accept Посмотреть сообщение
Код
    double fi=(y2/r);
это вообще косинус начального угла и препод тебе правильно сказал, что надо вычислить арктангенс для того, чтобы найти начальный угол
или же тогда арккосинус вот этого значения
ты находишь альфа, а потом к альфе прибавляешь угол, который у тебя дан
и смысл этого в том, чтобы сделать
C
1
void far _Cdecl arc(int __x, int __y, int __stangle, int __endangle, int __radius);
то есть
C
1
    arc(Ox, Oy, альфа, альфа+который_дан, r);
откуда у тебя там радианы ?

если у тебя угол дан в радианах, то формула градусы = угол/PI*180
формулу проверил - у тебя правильная
C
1
2
3
4
double radtograd(double frad)
{
    return 180*frad/M_PI;
}
и чего ты тут вот намудрил
Код
    double fs = rad(atan2(y-y1, x1-x));
    arc(x, y, fs, f+fs, r);
угол посчитал правильно а подставил его вообще глючно, какое f ?

надо вот так
C
1
    arc(x, y, fs, fs+f, r);
так оно не просто красивее, оно понятнее
А теперь полностю кодом не могли бы выложить ?? А то чет не все понятно
0
30.06.2009, 04:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2009, 04:14
Привет! Вот еще темы с ответами:

Нужно написать прогу на С++ - C++
Помогите пожалуйста с написанием проги... Вот условие такое: Написать программу, которая получает случайное целое типа int, выводит его...

Нужно написать прогу(срочно) - C++
Записать в файл последовательного доступа N натуральных чисел: a1, a2, …, an (числа, получить с помощью датчика случайных чисел)....

нужно написать прогу со строками - C++
необходимо наиболее просто написать задачу на си получить из слова а,вычеркиванием некоторого кол-ва букв,слово b.отображать на экран...

Нужно запрограммировать формулу - C++
Нужно запрограммировать формулу, чтобы водились значение угла, и показателем преломления. Вот формула R_{TE}=\frac{(n_1cos\, \theta...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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