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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
brus69
0 / 0 / 0
Регистрация: 23.03.2011
Сообщений: 3
#1

Аналоговый амперметр - C++

04.06.2011, 14:30. Просмотров 1145. Ответов 1
Метки нет (Все метки)

Добрый день, подскажите что в моей программе не так.
Уже 5 раз не могу здать программу своему научному руководителю.
Задача: написать программу аналоговый амперметр
в коде должны быть классы
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
//---------------------------------------------------------------------------
 
#ifndef Unit2H
#define Unit2H
#include <vcl.h>
#pragma hdrstop
#include <Classes.hpp>
#include <math.h>
#include <stdlib.h>
#pragma package(smart_init)
//#pragma resource "*.dfm"
 
class ScaleA //класс, рисующий букву А
{
    TImage*Image1;//указатель на изображение 
public:
    ScaleA(TImage*pIm=0)//конструктор класса
    {
       Image1=pIm;
    }
    void SetImage(TImage*pIm)//метод задания изображения
    {
       Image1=pIm;
    }
    int Draw() //метод рисования буквы А
    {
        if(!Image1)
            return 0;
        int font=Image1->Canvas->Font->Height;//сохранения текущего шрифта
        Image1->Canvas->Font->Height=90; //задание нового шрифта
        Image1->Canvas->TextOutA(215,150,"A"); //рисование буквы А под шкалой
        Image1->Canvas->Font->Height=font;
        return 1;
    }
};
 
class Scale //класс, рисующий шкалу
{
    TImage*Image1;
public:
    Scale(TImage*pImage=0) // конструктор
    {
 
        this->Image1=pImage;
 
    }
    void SetImage(TImage*pImage) //метод задания изображения
    {
        this->Image1=pImage;
    }
    int Draw() //метод рисования шкалы
    {
        if(!this->Image1)
            return 0;
        Image1->Canvas->Brush->Color=(TColor)RGB(255,255,255);
    Image1->Canvas->FillRect(Image1->Canvas->ClipRect); //создание белого фона для изображения
    Image1->Canvas->Brush->Color=(TColor)RGB(0,0,0);    //задание черного цвета кисти
    TRect rect;
    rect.left=190;
    rect.Top=300;
    rect.Right=290;
    rect.Bottom=305;
    Image1->Canvas->FillRect(rect); //рисование основания стрелки
    Image1->Canvas->MoveTo(240,100);//
    Image1->Canvas->LineTo(240,80); //рисование нулевой отметки на шкале
    Image1->Canvas->Brush->Color=(TColor)RGB(255,255,255);//задание белого цвета для кисти
    Image1->Canvas->TextOutA(237,65,"0"); //изображение нуля на шкале
    for(int i=1;i<=15;i++) //разметка шкалы(положительная часть)
    {
        Image1->Canvas->MoveTo(240+200*sin(i*3*3.14/180),300-200*cos(i*3*3.14/180));
        Image1->Canvas->LineTo(240+((i%5)?210:220)*sin(i*3*3.14/180),300-((i%5)?210:220)*cos(i*3*3.14/180)); //рисование делений
        if(!(i%5))     //выделение каждого 5-го штриха
        {
            char buf[4];
            itoa(i*10,buf,10); //конвертирование числа в строки
            AnsiString tmp(buf);//создание стринга
            Image1->Canvas->TextOutA(240+((i%5)?210:220)*sin(i*3*3.14/180)-3,300-((i%5)?210:220)*cos(i*3*3.14/180)-15,tmp);     //подписывание деления
        }
    }
    for(int i=1;i<=15;i++) //разметка отрицательной части шкалы(все аналогично)
    {
        Image1->Canvas->MoveTo(240-200*sin(i*3*3.14/180),300-200*cos(i*3*3.14/180));
        Image1->Canvas->LineTo(240-((i%5)?210:220)*sin(i*3*3.14/180),300-((i%5)?210:220)*cos(i*3*3.14/180));
        if(!(i%5))
        {
            char buf[4];
            itoa(i*10,buf,10);
            AnsiString tmp(buf);
            Image1->Canvas->TextOutA(240-((i%5)?210:220)*sin(i*3*3.14/180)-10,300-((i%5)?210:220)*cos(i*3*3.14/180)-15,tmp);
        }
    }
    ScaleA scalea(Image1);//создание объекта класса, рисующего букву А на шкале
    scalea.Draw();//рисование буквы А
    return 1;
    }
 
} ;
 
class Arrow //класс, рисующий стрелку
{
    TImage*Image1;//указатель на ихображения
    float grad;//и отклонение в градусах
 public:
    Arrow(TImage*pImage=0)//конструктор
    {
        Image1=pImage;
        grad=0;
    }
    void SetImage(TImage*pImage)//метод задания изображения
    {
        Image1=pImage;
    }
    int Draw(float fGrad)//метод рисования стрелки
    {
        if(!Image1)
            return 0;
        grad=fGrad;
        Image1->Canvas->MoveTo(240,300);  //установление пера к основанию стрелки
        Image1->Canvas->Pen->Width=3; //задание толщины пера
        Image1->Canvas->LineTo(240+190*sin(grad*3.14/180),300-190*cos(grad*3.14/180));  //рисование основной части стрелки
        Image1->Canvas->Pen->Width=1; //задание толщины пера(указательной части)
        Image1->Canvas->LineTo(240+205*sin(grad*3.14/180),300-205*cos(grad*3.14/180));
        return 1;
    }
};
 
class Calc//класс, вычисляющий отклонение в градусах по величине тока
{
    float value,grad;
public:
    Calc()//конструктор по умолчанию
    {
 
 
    }
    float ObtainGrad(float tmp)//метод вычисления отклононеия стрелки
    {
        value=tmp;
        if((tmp>=150)||(tmp<=-150)) //если число выходит за диапазон (-150,150), стрелка "упирается" в соответствующий край шкалы
        {
           if(tmp>=150)
               grad=45;
           if(tmp<=-150)
           {
               grad=-45;
           }
        }
        else
           grad=45.0/150*tmp;
        return grad;
    }
 
};
 
 
 
//---------------------------------------------------------------------------
#endif
0
Вложения
Тип файла: rar проект123.rar (368.3 Кб, 32 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2011, 14:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Аналоговый амперметр (C++):

Как послать аналоговый звук в порт? - C++
Здравствуйте. Интересует вопрос как вывести звук в аналоговой форме. http://www.cyberforum.ru/audio-amplifier/thread1572652.html ...

Аналоговый секундомер - C++
Здравствуйте, форумчане) у кого-нибудь есть проект готового оконного аналогового секундомера на С++ написанного в qt, visualstudio или...

Амперметр и Arduino - Arduino
Здравствуйте. Есть Arduino UNO R3 и есть амперметр. К амперметру припаян резистор на 1 кОм. Требуется сымитировать биение сердца, то есть...

Вольт-амперметр на ATmega8 - Микроконтроллеры
Подскажите пожалуйста, возможно ли сделать вольт/ампер метр на мега8 и чтобы выводил значения на ПК через USB? Искал в интернете, нашел...

Что измеряет амперметр? - Электроника
Здравствуйте! Возник вопрос: что именно измеряет амперметр? Ток это движение заряженных частиц (например электронов), сила тока это заряд...

Какой ток течет через амперметр - Электричество и магнетизм
Какой ток Iа течет через амперметр в схеме, показанной на рисунке? ЭДС источника Е=7.5 В, R1=15 ом, R2=R3=R4=10 ом.

1
brus69
0 / 0 / 0
Регистрация: 23.03.2011
Сообщений: 3
04.06.2011, 14:46  [ТС] #2
руководителю не нравиться что стоит указаталь на избражение TImage*Image1;//указатель на изображение
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2011, 14:46
Привет! Вот еще темы с ответами:

Как из прибора сделать вольтметр и амперметр? - Электричество и магнетизм
Имеется прибор с ценой деления С=5мкА/дел. Шкала прибора имеет 150 делений внутреннее сопротивление r=100 Ом. Как из этого прибора сделать:...

Определить ток, текущий через амперметр - Электричество и магнетизм
Помогите пожалуйста дорешать задачу. Зашла в тупик, смущает R3, как теперь ее выразить, что бы подставить в готовую формулу. Прилагаю...

Найти ток, который покажет амперметр - Электричество и магнетизм
какой ток покажет амперметр в схеме изображенной на картинке ? сопротивления резисторов R1 = 1,25 Ом R2 = 1 Ом R3 = 3 Ом R4 = 7 Ом, эдс...

Что покажет амперметр с внутренним сопротивлением - Электричество и магнетизм
Вольтметр с внутренним сопротивлением R1= 200 Ом, подключённый к источнику тока ЭДС E=12В, показывает U=11В. Что покажет амперметр с...


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

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

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