Задача
Посчитать комплексный коэффициент отражения нагрузки и отметить его точкой на круге Смита.
Компоненты на форме
Edit (EditR, EditX, EditZ0), PaintBox, Button (ButtonDraw), Label (LabelG).
Как работает
- Ввести R, X нагрузки и волновое Z0.
- Посчитать Γ = (Z−Z0)/(Z+Z0) в комплексном виде.
- Поставить точку на единичном круге.
Исходный код модуля
//---------------------------------------------------------------------------
// Проект 38. Точка импеданса на диаграмме Смита
// Коэффициент отражения по нагрузке и его отметка.
//---------------------------------------------------------------------------
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------
// Считаем комплексный коэффициент отражения нагрузки R+jX в тракте Z0
// и ставим точку на круге Смита. gammaMag — модуль, ядро проверяем.
void gamma(double R,double X,double Z0,double &gr,double &gi)
{
double dr=R-Z0, di=X, sr=R+Z0, si=X;
double den=sr*sr+si*si;
gr=(dr*sr+di*si)/den;
gi=(di*sr-dr*si)/den;
}
double gammaMag(double R,double X,double Z0)
{
double gr,gi; gamma(R,X,Z0,gr,gi); return sqrt(gr*gr+gi*gi);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonDrawClick(TObject *Sender)
{
double R,X,Z0;
try { R=StrToFloat(EditR->Text); X=StrToFloat(EditX->Text); Z0=StrToFloat(EditZ0->Text); }
catch(...) { LabelG->Caption="Проверьте числа"; return; }
double gr,gi; gamma(R,X,Z0,gr,gi);
TCanvas *c=PaintBox1->Canvas; int W=PaintBox1->Width,H=PaintBox1->Height;
int cx=W/2, cy=H/2, rad=(W<H?W:H)/2-10;
c->Brush->Color=clBlack; c->FillRect(PaintBox1->ClientRect);
c->Pen->Color=(TColor)RGB(80,110,100); c->Brush->Style=bsClear;
c->Ellipse(cx-rad,cy-rad,cx+rad,cy+rad);
c->MoveTo(cx-rad,cy); c->LineTo(cx+rad,cy);
int px=cx+(int)(gr*rad), py=cy-(int)(gi*rad);
c->Brush->Color=clYellow; c->Brush->Style=bsSolid;
c->Ellipse(px-5,py-5,px+5,py+5);
LabelG->Caption = "|Γ| = " + FormatFloat("0.####", gammaMag(R,X,Z0));
}
//---------------------------------------------------------------------------
Пояснения
- Центр круга — согласование (Γ=0), край — полное отражение (|Γ|=1).
- Ядро gammaMag проверено на согласованной и рассогласованной нагрузке.
📦 help-user.ru — срочный ремонт компьютеров и восстановление данных в Москве: help-user.ru.
Что дальше
Создайте в C++Builder новый проект, разместите перечисленные компоненты и вставьте код модуля. Остальные 49 программ — в разделе проектов на C++Builder; смотрите также обзор среды и контроллеры AVR.