⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smithofpandlg.cpp

📁 多功能史密斯圆图
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	strS1.Format("%.2f",rlxl.r*impedance.Z0);
    strX1.Format("%.2f",rlxl.x*impedance.Z0);
	strX2.Format("%.2f",rlxl.x*impedance.Z0*(-1));
	if(rlxl.x>=0)
	    str.Format("%s +j %s",strS1,strX1);
	else
		str.Format("%s -j %s",strS1,strX2);
	m_hShow=str; 

	m_hSwr.Format("%.2f",chart.GetSWR(frfl));//获取驻波比
	m_hGuiyiShibu.Format("%.2f",rlxl.r);//归一化阻抗实部
	m_hGuiyiXubu.Format("%.2f",rlxl.x);//归一化阻抗虚部
	m_hFansheShibu.Format("%.2f",frfl.Fr);//反射系数实部
	m_hFansheXubu.Format("%.2f",frfl.Fl);//反射系数虚部
	UpdateData(FALSE);
	*pResult = 0;
}


void CSmithOfPanDlg::OnPipei() 
{
	// TODO: Add your control notification handler code here
	CDC * pDC = GetDC();
	CPen pen(PS_DOT,2,RGB(155,53,12));
	CPen redpen(PS_DOT,2,RGB(255,0,0));
	CPen * poldPen = pDC->SelectObject(&redpen);
	
	float temp,t;
	//获取阻抗
	IMPEDANCE impedance;
	DAONA daona;
	impedance.Rx = m_hDianzu;   //实部
	impedance.Ry = m_hDiankang;  //虚部
	impedance.Z0 = m_hTexing;    //特性阻抗
	//获取归一化阻抗
    RLXL rlxl;
	rlxl = chart.CacuRLXL(impedance);
		//获取导纳
	DAONA Y0;
	Y0=chart.CacuDAONA(rlxl,impedance.Z0);
	//获取反射系数
    FRFL frfl;
	frfl = chart.CacuFRFL(rlxl);
	CIRCLE rCircle = chart.CacuCircleR(rlxl.r);
	CIRCLE xCircle = chart.CacuCircleX(rlxl.x);

	chart.DrawCircleR(rCircle,pDC);
	chart.DrawCircleX(xCircle,pDC);
	chart.DrawCircle(frfl,pDC);
	chart.ShowImpedance(frfl,rlxl,impedance.Z0,pDC);

    t=(Y0.Yb+sqrt(Y0.Yg*((1/impedance.Z0-Y0.Yg)*(1/impedance.Z0-Y0.Yg)+Y0.Yb*Y0.Yb)*impedance.Z0))/(Y0.Yg-1/impedance.Z0);
     
	if(impedance.Ry <0)  //计算d长度
	{
        m_hD=1/(2*3.14)*atan(t);
	}
	else 
		m_hD=1/6.28*(3.14+atan(t));
    temp=m_hD;
	if(m_hD<0)m_hD++;
     //获得旋转后新点的反射系数
     frfl = chart.Rotate(frfl,temp);
	//重新获得归一化阻抗
    rlxl =  chart.CacuRLXL(frfl);
	daona = chart.CacuDAONA(rlxl,impedance.Z0);
	rCircle = chart.CacuCircleR(rlxl.r);

    

    pDC->SelectObject(&pen);
	chart.DrawCircleR(rCircle,pDC);

	rlxl.r=rlxl.r *impedance.Z0;
	rlxl.x=rlxl.x *impedance.Z0;

	m_hL=-1/6.28*atan(rlxl.x /impedance.Z0);//计算L长度
	if(m_hL<0)m_hL++;
    ///////////////////////显示交点坐标
	rlxl =  chart.CacuRLXL(frfl);
	chart.ShowImpedance(frfl,rlxl,impedance.Z0,pDC);
	CString str,strS1,strX1,strX2;
	strS1.Format("%.2f",rlxl.r*impedance.Z0);
    strX1.Format("%.2f",rlxl.x*impedance.Z0);
	strX2.Format("%.2f",rlxl.x*impedance.Z0*(-1));
	if(rlxl.x>=0)
	    str.Format("%s +j %s",strS1,strX1);
	else
		str.Format("%s -j %s",strS1,strX2);
	m_hShow=str;

	pDC->SelectObject(poldPen);
	ReleaseDC(pDC);
	UpdateData(FALSE);
	
}

void CSmithOfPanDlg::OnBUTTONchuankai() 
{
	// TODO: Add your control notification handler code here
	CDC * pDC = GetDC();
	CPen pen(PS_DOT,2,RGB(155,53,12));
	CPen redpen(PS_DOT,2,RGB(255,0,0));
	CPen * poldPen = pDC->SelectObject(&redpen);

	float temp,t;
	//获取阻抗
	IMPEDANCE impedance;
	DAONA daona;
	impedance.Rx = m_hDianzu;   //实部
	impedance.Ry = m_hDiankang;  //虚部
	impedance.Z0 = m_hTexing;    //特性阻抗
	//获取归一化阻抗
    RLXL rlxl;
	rlxl = chart.CacuRLXL(impedance);
		//获取导纳
	DAONA Y0;
	Y0=chart.CacuDAONA(rlxl,impedance.Z0);
	//获取反射系数
    FRFL frfl;
	frfl = chart.CacuFRFL(rlxl);

	CIRCLE rCircle = chart.CacuCircleR(rlxl.r);
	CIRCLE xCircle = chart.CacuCircleX(rlxl.x);

	chart.DrawCircleR(rCircle,pDC);
	chart.DrawCircleX(xCircle,pDC);
	chart.DrawCircle(frfl,pDC);
	chart.ShowImpedance(frfl,rlxl,impedance.Z0,pDC);

    t=(Y0.Yb+sqrt(Y0.Yg*((1/impedance.Z0-Y0.Yg)*(1/impedance.Z0-Y0.Yg)+Y0.Yb*Y0.Yb)*impedance.Z0))/(Y0.Yg-1/impedance.Z0);
     
	if(impedance.Ry <0)
	{
        m_hD=1/(2*3.14)*atan(t);
	}
	else 
		m_hD=1/6.28*(3.14+atan(t));
    temp=m_hD;
	if(m_hD<0)m_hD++;
     //获得旋转后新点的反射系数
     frfl = chart.Rotate(frfl,temp);
	//重新获得归一化阻抗
    rlxl =  chart.CacuRLXL(frfl);
	daona = chart.CacuDAONA(rlxl,impedance.Z0);
	rCircle = chart.CacuCircleR(rlxl.r);

   
    pDC->SelectObject(&pen);
	chart.DrawCircleR(rCircle,pDC);

	rlxl.r=rlxl.r *impedance.Z0;
	rlxl.x=rlxl.x *impedance.Z0;

	m_hL=1/6.28*atan(impedance.Z0 /rlxl.x);//计算L长度
    ///////////////////////显示交点坐标
	rlxl =  chart.CacuRLXL(frfl);
	chart.ShowImpedance(frfl,rlxl,impedance.Z0,pDC);
	CString str,strS1,strX1,strX2;
	strS1.Format("%.2f",rlxl.r*impedance.Z0);
    strX1.Format("%.2f",rlxl.x*impedance.Z0);
	strX2.Format("%.2f",rlxl.x*impedance.Z0*(-1));
	if(rlxl.x>=0)
	    str.Format("%s +j %s",strS1,strX1);
	else
		str.Format("%s -j %s",strS1,strX2);
	m_hShow=str;

	pDC->SelectObject(poldPen);
	ReleaseDC(pDC);
	UpdateData(FALSE);
}

void CSmithOfPanDlg::OnAbout() 
{
	// TODO: Add your control notification handler code here
    CAboutDlg dlg;
	int nResponse = dlg.DoModal();
	
}

void CSmithOfPanDlg::OnButtonbingduan() 
{
	// TODO: Add your control notification handler code here
	CDC * pDC = GetDC();
	CPen pen(PS_DOT,2,RGB(155,53,12));
	CPen redpen(PS_DOT,2,RGB(255,0,0));
	CPen * poldPen = pDC->SelectObject(&redpen);

	float temp,t;
	//获取阻抗
	IMPEDANCE impedance;
	DAONA daona;
	impedance.Rx = m_hDianzu;   //实部
	impedance.Ry = m_hDiankang;  //虚部
	impedance.Z0 = m_hTexing;    //特性阻抗
	//获取归一化阻抗
    RLXL rlxl;
	rlxl = chart.CacuRLXL(impedance);
		//获取导纳
	DAONA Y0;
	Y0=chart.CacuDAONA(rlxl,impedance.Z0);
	//获取反射系数
    FRFL frfl;
	frfl = chart.CacuFRFL(rlxl);
	CIRCLE rCircle = chart.CacuCircleR(rlxl.r);
	CIRCLE xCircle = chart.CacuCircleX(rlxl.x);

	chart.DrawCircleR(rCircle,pDC);
	chart.DrawCircleX(xCircle,pDC);
	chart.DrawCircle(frfl,pDC);
	chart.ShowImpedance(frfl,rlxl,impedance.Z0,pDC);

    t=(impedance.Ry+sqrt(impedance.Rx*((impedance.Z0-impedance.Rx)*(impedance.Z0-impedance.Rx)+impedance.Ry*impedance.Ry)/impedance.Z0))/(impedance.Rx-impedance.Z0);
     
	if(impedance.Ry <0)
	{
        m_hD=1/(2*3.14)*atan(t);
	}
	else 
		m_hD=1/6.28*(3.14+atan(t));
    temp=m_hD;
	if(m_hD<0)m_hD++;
     //获得旋转后新点的反射系数
     frfl = chart.Rotate(frfl,temp);
	//重新获得归一化阻抗
    rlxl =  chart.CacuRLXL(frfl);
	daona = chart.CacuDAONA(rlxl,impedance.Z0);

	rlxl.r=rlxl.r *impedance.Z0;
	rlxl.x=rlxl.x *impedance.Z0;

	m_hL=1/6.28*atan(1/impedance.Z0/daona.Yb);//计算L长度
	UpdateData(FALSE);
    ///////////////////////显示交点坐标
	impedance.Rx = m_hDianzu;   //实部
	impedance.Ry = m_hDiankang;  //虚部
	impedance.Z0 = m_hTexing;    //特性阻抗
	//获取归一化阻抗
	rlxl = chart.CacuRLXL(impedance);
	//获取导纳
	Y0=chart.CacuDAONA(rlxl,impedance.Z0);
	//获取反射系数
	frfl = chart.CacuFRFL(rlxl);
	
    t=(Y0.Yb+sqrt(Y0.Yg*((1/impedance.Z0-Y0.Yg)*(1/impedance.Z0-Y0.Yg)+Y0.Yb*Y0.Yb)*impedance.Z0))/(Y0.Yg-1/impedance.Z0);
     
	if(impedance.Ry <0)  
	{
        temp=1/(2*3.14)*atan(t);
	}
	else 
		temp=1/6.28*(3.14+atan(t));
     //获得旋转后新点的反射系数
     frfl = chart.Rotate(frfl,temp);
	//重新获得归一化阻抗
    rlxl =  chart.CacuRLXL(frfl);
	rCircle = chart.CacuCircleR(rlxl.r);

  
    pDC->SelectObject(&pen);
	chart.DrawCircleR(rCircle,pDC);


	chart.ShowImpedance(frfl,rlxl,impedance.Z0,pDC);
	CString str,strS1,strX1,strX2;
	strS1.Format("%.2f",rlxl.r*impedance.Z0);
    strX1.Format("%.2f",rlxl.x*impedance.Z0);
	strX2.Format("%.2f",rlxl.x*impedance.Z0*(-1));
	if(rlxl.x>=0)
	    str.Format("%s +j %s",strS1,strX1);
	else
		str.Format("%s -j %s",strS1,strX2);
	m_hShow=str;

	pDC->SelectObject(poldPen);
	ReleaseDC(pDC);
	UpdateData(FALSE);
    
}

void CSmithOfPanDlg::OnButtonbingkai() 
{
// TODO: Add your control notification handler code here
	CDC * pDC = GetDC();
	CPen pen(PS_DOT,2,RGB(155,53,12));
	CPen redpen(PS_DOT,2,RGB(255,0,0));
	CPen * poldPen = pDC->SelectObject(&redpen);

	float temp,t;
	//获取阻抗
	IMPEDANCE impedance;
	DAONA daona;
	impedance.Rx = m_hDianzu;   //实部
	impedance.Ry = m_hDiankang;  //虚部
	impedance.Z0 = m_hTexing;    //特性阻抗
	//获取归一化阻抗
    RLXL rlxl;
	rlxl = chart.CacuRLXL(impedance);
		//获取导纳
	DAONA Y0;
	Y0=chart.CacuDAONA(rlxl,impedance.Z0);
	//获取反射系数
    FRFL frfl;
	frfl = chart.CacuFRFL(rlxl);
	CIRCLE rCircle = chart.CacuCircleR(rlxl.r);
	CIRCLE xCircle = chart.CacuCircleX(rlxl.x);

	chart.DrawCircleR(rCircle,pDC);
	chart.DrawCircleX(xCircle,pDC);
	chart.DrawCircle(frfl,pDC);
	chart.ShowImpedance(frfl,rlxl,impedance.Z0,pDC);


    t=(impedance.Ry+sqrt(impedance.Rx*((impedance.Z0-impedance.Rx)*(impedance.Z0-impedance.Rx)+impedance.Ry*impedance.Ry)/impedance.Z0))/(impedance.Rx-impedance.Z0);
     
	if(impedance.Ry <0)
	{
        m_hD=1/(2*3.14)*atan(t);
	}
	else 
		m_hD=1/6.28*(3.14+atan(t));
    temp=m_hD;
	if(m_hD<0)m_hD++;
     //获得旋转后新点的反射系数
     frfl = chart.Rotate(frfl,temp);
	//重新获得归一化阻抗
    rlxl =  chart.CacuRLXL(frfl);
	daona = chart.CacuDAONA(rlxl,impedance.Z0);

	rlxl.r=rlxl.r *impedance.Z0;
	rlxl.x=rlxl.x *impedance.Z0;

	m_hL=-1/6.28*atan(impedance.Z0*daona.Yb);//计算L长度
	if(m_hL<0)m_hL++;
	UpdateData(FALSE);
    ///////////////////////显示交点坐标
	impedance.Rx = m_hDianzu;   //实部
	impedance.Ry = m_hDiankang;  //虚部
	impedance.Z0 = m_hTexing;    //特性阻抗
	//获取归一化阻抗
	rlxl = chart.CacuRLXL(impedance);
	//获取导纳
	Y0=chart.CacuDAONA(rlxl,impedance.Z0);
	//获取反射系数
	frfl = chart.CacuFRFL(rlxl);
	
    t=(Y0.Yb+sqrt(Y0.Yg*((1/impedance.Z0-Y0.Yg)*(1/impedance.Z0-Y0.Yg)+Y0.Yb*Y0.Yb)*impedance.Z0))/(Y0.Yg-1/impedance.Z0);
     
	if(impedance.Ry <0)  
	{
        temp=1/(2*3.14)*atan(t);
	}
	else 
		temp=1/6.28*(3.14+atan(t));
     //获得旋转后新点的反射系数
     frfl = chart.Rotate(frfl,temp);
	//重新获得归一化阻抗
    rlxl =  chart.CacuRLXL(frfl);
	rCircle = chart.CacuCircleR(rlxl.r);

   
    pDC->SelectObject(&pen);
	chart.DrawCircleR(rCircle,pDC);


	chart.ShowImpedance(frfl,rlxl,impedance.Z0,pDC);
	CString str,strS1,strX1,strX2;
	strS1.Format("%.2f",rlxl.r*impedance.Z0);
    strX1.Format("%.2f",rlxl.x*impedance.Z0);
	strX2.Format("%.2f",rlxl.x*impedance.Z0*(-1));
	if(rlxl.x>=0)
	    str.Format("%s +j %s",strS1,strX1);
	else
		str.Format("%s -j %s",strS1,strX2);
	m_hShow=str;

	pDC->SelectObject(poldPen);
	ReleaseDC(pDC);
	UpdateData(FALSE);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -