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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
brus69
0 / 0 / 0
Регистрация: 23.03.2011
Сообщений: 3
04.06.2011, 14:30     Аналоговый амперметр #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
Вложения
Тип файла: rar проект123.rar (368.3 Кб, 31 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2011, 14:30     Аналоговый амперметр
Посмотрите здесь:

Какой ток течет через амперметр
Найти ток, который покажет амперметр
Как из прибора сделать вольтметр и амперметр?
аналоговый тахометр Delphi
Вольт-амперметр на ATmega8
Что покажет амперметр с внутренним сопротивлением
Как послать аналоговый звук в порт? C++
Какую силу тока покажет амперметр, найти падение НАПРЯЖЕНИЯ
Определить ток, текущий через амперметр
Аналоговый секундомер C++ WinAPI
Амперметр и Arduino Arduino
Что измеряет амперметр?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
brus69
0 / 0 / 0
Регистрация: 23.03.2011
Сообщений: 3
04.06.2011, 14:46  [ТС]     Аналоговый амперметр #2
руководителю не нравиться что стоит указаталь на избражение TImage*Image1;//указатель на изображение
Yandex
Объявления
04.06.2011, 14:46     Аналоговый амперметр
Ответ Создать тему
Опции темы

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