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

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

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

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

27.06.2009, 23:55. Просмотров 1902. Ответов 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
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
30.06.2009, 05:59 #16
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
 
void Build(int x, int y, int x1, int y1, int f);
double RadToGrad(double frad);
 
int main()
{
    int x,y;
    int x1,y1;
    int f;
    
    printf("Write center coord ");
    scanf("%d %d", &x, &y);
    
    printf("Write start coord ");
    scanf("%d %d", &x1, &y1);
    
    printf("Write angle ");
    scanf("%d", &f);
    
    clrscr();
    Build(x, y, x1, y1, f);
    
    getch();
    return 0;
}
 
void Build(int x, int y, int x1, int y1, int f)
{
    double r;
    double fs;
    int gd, gm;
    
    gd = DETECT;
    gm = 0;
    initgraph(&gd, &gm, "D:\\TC\\BGI");
    
    r = sqrt((x1-x) * (x1-x) + (y1-y) * (y1-y)); /* длина вектора OA */
    fs = RadToGrad(abs(atan((y1-y)/(x1-x))));    /* угол альфа */
    arc(x, y, fs, fs+f, r);
}
 
double RadToGrad(double frad)
{
    return 180*frad/M_PI;
}
не запускал
угол фи ты вводишь, а угол альфа вычисляешь
чертёж доработал, центр для начала в O(0;0), где первый ноль - это x, второй ноль - это y
точка A имеет координаты x1, y1 - A(x1, y1)
1
Миниатюры
Нужно вставить в прогу правильную формулу(С++)  
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
30.06.2009, 06:53 #17
ещё добавить
C
1
#include <graphics.h>
может быть запустится, у меня не настроено это дело
1
Alex1991
1 / 1 / 0
Регистрация: 03.12.2008
Сообщений: 34
30.06.2009, 17:19  [ТС] #18
Ок спасибо... Впринципе все работает и похоже на правду
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
01.07.2009, 02:54 #19
я сёдня всё таки запустил

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
 
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
#include <graphics.h>
 
void Build(int x, int y, int x1, int y1, int f);
double RadToGrad(double frad);
 
/* рисует дугу относительно центра экрана */ 
int main()
{
    int x, y;
    int x1, y1;
    int f;
 
    printf("Write center coord ");
    scanf("%d %d", &x, &y);
 
    printf("Write start coord ");
    scanf("%d %d", &x1, &y1);
 
    printf("Write angle ");
    scanf("%d", &f);
 
    clrscr();
    Build(x, y, x1, y1, f);
    getch();
 
    closegraph();
    return 0;
}
 
void Build(int x, int y, int x1, int y1, int f)
{
    double r;
    double fs;
    const int imgx = 320,
          imgy = 240,
              span = 10;
 
    int gd, gm;
    
    gd = DETECT;
    gm = 0;
    initgraph(&gd, &gm, "c:\\inbound\\bc\\bgi");
 
    r = sqrt((x1-x) * (x1-x) + (y1-y) * (y1-y)); /* длина вектора OA */
    fs = RadToGrad(abs(atan((y1-y)/(x1-x))));    /* угол альфа */
    arc(
        imgx+x*span,
        imgy+y*span,
        fs,
        fs+f,
        r*span
    );
}
 
double RadToGrad(double frad)
{
    return 180*frad/M_PI;
}
подкорректировал к центру экрана, оно оказывается рисует в обратную сторону, то есть начинает справа и наращивает окружность влево
для O(0; 0), A(3; 5) и 45 работает нормально
а как начать слева и наращивать вправо я чо-то не допёр, с отрицательным углом вообще ничего не нарисовалось, так что может быть это и возможно, но на данном этапе неизвестно
ты себе путь поправь к драйверу, я просто на c:\ редко что ставлю
1
Alex1991
1 / 1 / 0
Регистрация: 03.12.2008
Сообщений: 34
01.07.2009, 20:24  [ТС] #20
ок

Добавлено через 3 часа 59 минут 33 секунды
Цитата Сообщение от accept Посмотреть сообщение
я сёдня всё таки запустил

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
 
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
#include <graphics.h>
 
void Build(int x, int y, int x1, int y1, int f);
double RadToGrad(double frad);
 
/* рисует дугу относительно центра экрана */ 
int main()
{
    int x, y;
    int x1, y1;
    int f;
 
    printf("Write center coord ");
    scanf("%d %d", &x, &y);
 
    printf("Write start coord ");
    scanf("%d %d", &x1, &y1);
 
    printf("Write angle ");
    scanf("%d", &f);
 
    clrscr();
    Build(x, y, x1, y1, f);
    getch();
 
    closegraph();
    return 0;
}
 
void Build(int x, int y, int x1, int y1, int f)
{
    double r;
    double fs;
    const int imgx = 320,
          imgy = 240,
              span = 10;
 
    int gd, gm;
    
    gd = DETECT;
    gm = 0;
    initgraph(&gd, &gm, "c:\\inbound\\bc\\bgi");
 
    r = sqrt((x1-x) * (x1-x) + (y1-y) * (y1-y)); /* длина вектора OA */
    fs = RadToGrad(abs(atan((y1-y)/(x1-x))));    /* угол альфа */
    arc(
        imgx+x*span,
        imgy+y*span,
        fs,
        fs+f,
        r*span
    );
}
 
double RadToGrad(double frad)
{
    return 180*frad/M_PI;
}
подкорректировал к центру экрана, оно оказывается рисует в обратную сторону, то есть начинает справа и наращивает окружность влево
для O(0; 0), A(3; 5) и 45 работает нормально
а как начать слева и наращивать вправо я чо-то не допёр, с отрицательным углом вообще ничего не нарисовалось, так что может быть это и возможно, но на данном этапе неизвестно
ты себе путь поправь к драйверу, я просто на c:\ редко что ставлю
Неа неправильно(( Препод сказал что с помощью этих подпрограм можно нарисовать любую дугу.imgx, imgy, abs - использовать воопще не нужно
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
02.07.2009, 10:55 #21
Код
Должны быть реализованные подпрограммы рисования дуги круга заданной:
координатами центра, координатами стартовой точки и величиной угла
координаты центра отсчитываются от левого верхнего угла, если не юзать imgx, imgy
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
03.07.2009, 03:11 #22
тут для всех четвертей, координаты задаются типа 100,100 200,200 угол можно положительный отрицательный, но там особенности, что типа отрицательный это такой положительный, просто такой большой и так далее

одной формулой там не обошлось - пришлось добавить перемычку, в принципе когда точки подсветил, стало ясно, что оно не так рисует (то есть, несмотря на то, что угол вычисляется правильно, радиус правильно и рисовальная функция задаётся правильно, надо подгонять формулу под особенности bcc) я их выносить не стал, а прямо в формуле подогнал, но это требует вынесения в отдельную функцию, которая будет правильно их учитывать, и которую для другого компилятора с другим рисованием можно переделать
0
Вложения
Тип файла: zip drawarc.zip (1.1 Кб, 19 просмотров)
Alex1991
1 / 1 / 0
Регистрация: 03.12.2008
Сообщений: 34
03.07.2009, 11:43  [ТС] #23
во сложная прога мне попалась:'(
0
}{ottab
14 / 13 / 3
Регистрация: 04.03.2009
Сообщений: 75
03.07.2009, 12:10 #24
Ну впринцепе я невижу ошибки в исходном коде.
double y2=y1-y; //вычисляется координата начальной точки если начало координат сместить в центр круга.
double fi=(y2/r);// вычисляем синус начального угла угла
double fs=rad(sinh(fi)); // вычисляем угол начальный в градусах.

PS. r радиус круга.
0
03.07.2009, 12:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2009, 12:10
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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