亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? xddxdlg.cpp

?? 攝影測量相對定向程序
?? CPP
字號:
// xddxDlg.cpp : implementation file
//

#include "stdafx.h"
#include "xddx.h"
#include "xddxDlg.h"
#include"fstream"
#include ".\xddxdlg.h"
#include"MathEx.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
using namespace std;
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CXddxDlg dialog

CXddxDlg::CXddxDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CXddxDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CXddxDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CXddxDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CXddxDlg)
	// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
	DDX_Control(pDX, IDC_LIST_CoPoint, m_LstCtrl);
}

BEGIN_MESSAGE_MAP(CXddxDlg, CDialog)
	//{{AFX_MSG_MAP(CXddxDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUT_CoPointFile, OnBUTCoPointFile)
	//}}AFX_MSG_MAP
	ON_BN_CLICKED(IDC_BUT_Cal, OnBnClickedButCal)
	ON_BN_CLICKED(IDC_BUT_SaveData, OnBnClickedButSavedata)
	ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CXddxDlg message handlers

BOOL CXddxDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	m_PointNum=0;
	m_LstCtrl.InsertColumn(0,"右片y",LVCFMT_CENTER,60);
	m_LstCtrl.InsertColumn(0,"右片x",LVCFMT_CENTER,60);
	m_LstCtrl.InsertColumn(0,"左片y",LVCFMT_CENTER,60);
	m_LstCtrl.InsertColumn(0,"左片x",LVCFMT_CENTER,60);
	m_LstCtrl.InsertColumn(0,"序號 ",LVCFMT_CENTER,45);
	m_LstCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
	CEdit *pEdit=(CEdit *)GetDlgItem(IDC_EDIT_CoPoint);
	pEdit->SetWindowText("請點擊右邊的按鈕打開同名點文件^_^");
	int i;
	for(i=0;i<5;i++)
	{
		m_EleV[i]=0;
		m_EleP[i]=0;
	}
	threshold=0.000001;
	m_data=NULL;
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CXddxDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CXddxDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CXddxDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}



void CXddxDlg::OnBUTCoPointFile() 
{
	// TODO: Add your control notification handler code here
	CFileDialog OpenDlg(TRUE,"*.txt","data.txt",OFN_HIDEREADONLY,"文本文件(*.txt)|*.txt|數據文件(*.dat)|*.dat||",NULL);
	if(OpenDlg.DoModal()!=IDOK)
		return;
	CString FilePathName="";
	LONG Head;
	int i,j;
	FilePathName=OpenDlg.GetPathName();
	CEdit *pEdit=(CEdit *)GetDlgItem(IDC_EDIT_CoPoint);
	pEdit->SetWindowText(FilePathName);
	ifstream InFile;
	InFile.open(FilePathName,ios::in);
	if(!InFile)
	{
		MessageBox("打開文件失敗,無法讀出數據","錯誤",MB_ICONHAND|MB_OK);
		return;
	}
	InFile>>Head;
	if(Head!=9418204)
	{
		MessageBox("文件格式錯誤,無法讀出數據","錯誤",MB_ICONHAND|MB_OK);
		return;
	}
	InFile>>f>>x0>>y0>>m_PointNum;
	CString str1,str2;
	if(m_PointNum==0)
		return;
	m_data=new double [m_PointNum*4];
	if(m_data==NULL)
	{
		MessageBox("分配內存失敗,無法讀出數據","錯誤",MB_ICONHAND|MB_OK);
		return;
	}
	for(i=0;i<m_PointNum;i++)
	{
		str1.Format("%d",i+1);
		m_LstCtrl.InsertItem(i,str1);
		for(j=0;j<4;j++)
		{
			InFile>>m_data[i*4+j];
			str2.Format("%0.3f",m_data[i*4+j]);
			m_LstCtrl.SetItemText(i,j+1,str2);
		}
	}
	InFile.close();
	m_LstCtrl.InsertItem(m_PointNum,"主距");
	str2.Format("%0.3f",f);
	m_LstCtrl.SetItemText(m_PointNum,1,str2);
	m_LstCtrl.InsertItem(m_PointNum+1,"x0");
	str2.Format("%0.3f",x0);
	m_LstCtrl.SetItemText(m_PointNum+1,1,str2);
	m_LstCtrl.InsertItem(m_PointNum+2,"y0");
	str2.Format("%0.3f",y0);
	m_LstCtrl.SetItemText(m_PointNum+2,1,str2);
	CButton *pBut=(CButton *)GetDlgItem(IDC_BUT_Cal);
	pBut->EnableWindow(TRUE);
}

void CXddxDlg::OnBnClickedButCal()
{
	// TODO: 在此添加控件通知處理程序代碼
	double R1[9],R2[9],VX[5],ATA[25],ATQ[5],X1,Y1,Z1,X2,Y2,Z2,VV;
	double *A=new double [m_PointNum*5];
	double *Q=new double [m_PointNum];
	double *V=new double [m_PointNum];
	double *AX=new double [m_PointNum];
	double *AT=new double [m_PointNum*5];
	int i,j=0;
	for(i=0;i<5;i++)
	{
		VX[i]=1;
	}
	
	//--------------開始迭代求解未知數----------------//
	while(fabs(Sta_Max(&VX[0],5))>threshold)
	{
		j++;
		FormRotateMtx(R1,m_EleV[0],0        ,m_EleV[1]);
		FormRotateMtx(R2,m_EleV[2],m_EleV[3],m_EleV[4]);
		for(i=0;i<m_PointNum;i++)
		{
			X1=R1[0]*m_data[i*4]  +R1[1]*m_data[i*4+1]-R1[2]*f;
			Y1=R1[3]*m_data[i*4]  +R1[4]*m_data[i*4+1]-R1[5]*f;
			Z1=R1[6]*m_data[i*4]  +R1[7]*m_data[i*4+1]-R1[8]*f;
			X2=R2[0]*m_data[i*4+2]+R2[1]*m_data[i*4+3]-R2[2]*f;
			Y2=R2[3]*m_data[i*4+2]+R2[4]*m_data[i*4+3]-R2[5]*f;
			Z2=R2[6]*m_data[i*4+2]+R2[7]*m_data[i*4+3]-R2[8]*f;
			A[i*5]  = X1*Y2/Z1;
			A[i*5+1]=-X1;
			A[i*5+2]=-X2*Y1/Z2;
			A[i*5+3]=-Z2-Y1*Y2/Z2;
			A[i*5+4]= X2;
			Q[i]=-f*(Y1*Z2-Y2*Z1)/(Z1*Z2);
		}
		Mtx_Transpose(A,AT,m_PointNum,5);
		Mtx_Mult(AT,A,ATA,5,m_PointNum,5);
		Mtx_Mult(AT,Q,ATQ,5,m_PointNum,1);
		Mtx_Invers(ATA,5);
		Mtx_Mult(ATA,ATQ,VX,5,5,1);
		for(i=0;i<5;i++)
			m_EleV[i]=VX[i]+m_EleV[i];
		if(j>100000)
		{
			MessageBox("不收斂");
			break;
		}

	}

	//-----------------開始精度評定-------------------//
	Mtx_Mult(A,VX,AX,m_PointNum,5,1);
	Mtx_Add(AX,Q,V,m_PointNum);
	Mtx_Mult(V,V,&VV,1,m_PointNum,1);
	VV=VV/(m_PointNum-5);
	VV=sqrt(VV);
	for(i=0;i<5;i++)
		m_EleP[i]=VV*sqrt(ATA[i*6]);

	//----------------輸出未知數結果------------------//
	CString str;
	CEdit *pEdit=(CEdit *)GetDlgItem(IDC_EDIT_FaiLV);
	str.Format("%0.6f",m_EleV[0]*200/PI);
	pEdit->SetWindowText(str);
	pEdit=(CEdit *)GetDlgItem(IDC_EDIT_KapaLV);
	str.Format("%0.6f",m_EleV[1]*200/PI);
	pEdit->SetWindowText(str);
	pEdit=(CEdit *)GetDlgItem(IDC_EDIT_FaiRV);
	str.Format("%0.6f",m_EleV[2]*200/PI);
	pEdit->SetWindowText(str);
	pEdit=(CEdit *)GetDlgItem(IDC_EDIT_OmigaRV);
	str.Format("%0.6f",m_EleV[3]*200/PI);
	pEdit->SetWindowText(str);
	pEdit=(CEdit *)GetDlgItem(IDC_EDIT_KapaRV);
	str.Format("%0.6f",m_EleV[4]*200/PI);
	pEdit->SetWindowText(str);

	//----------------輸出未知數精度------------------//
	pEdit=(CEdit *)GetDlgItem(IDC_EDIT_FaiLP);
	str.Format("%0.6f",VV*sqrt(ATA[0])*200000/PI);
	pEdit->SetWindowText(str);
	pEdit=(CEdit *)GetDlgItem(IDC_EDIT_KapaLP);
	str.Format("%0.6f",VV*sqrt(ATA[6])*200000/PI);
	pEdit->SetWindowText(str);
	pEdit=(CEdit *)GetDlgItem(IDC_EDIT_FaiRP);
	str.Format("%0.6f",VV*sqrt(ATA[12])*200000/PI);
	pEdit->SetWindowText(str);
	pEdit=(CEdit *)GetDlgItem(IDC_EDIT_OmigaRP);
	str.Format("%0.6f",VV*sqrt(ATA[18])*200000/PI);
	pEdit->SetWindowText(str);
	pEdit=(CEdit *)GetDlgItem(IDC_EDIT_KapaRP);
	str.Format("%0.6f",VV*sqrt(ATA[24])*200000/PI);
	pEdit->SetWindowText(str);
	CButton *pBut=(CButton *)GetDlgItem(IDC_BUT_SaveData);
	pBut->EnableWindow(TRUE);
	delete [] A;
	delete [] Q;
	delete [] AT;
}

void CXddxDlg::OnBnClickedButSavedata()
{
	// TODO: 在此添加控件通知處理程序代碼
	CFileDialog DlgOpenFile(FALSE,"*.txt","result.txt",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"文本文件(*.txt)|*.txt|數據文件(*.dat)|*.dat||",NULL);;
	if(DlgOpenFile.DoModal()!=IDOK)
		return;
	CString StrFileName;
	StrFileName=DlgOpenFile.GetPathName();
	ofstream OpenFile;
	OpenFile.open(StrFileName);
	if(OpenFile==NULL)
	{
		MessageBox("創建文件失敗,無法寫入數據","錯誤",MB_ICONHAND|MB_OK);
		return;
	}
	OpenFile.setf(ios::fixed);
	OpenFile.setf(ios::showpoint);
	OpenFile.precision(6);
	OpenFile<<"Fai1  :"<<m_EleV[0]*200/PI<<"gon"<<"  精度:"<<m_EleP[0]*200000/PI<<" mgon"<<endl;
	OpenFile<<"Kapa1 :"<<m_EleV[1]*200/PI<<"gon"<<"  精度:"<<m_EleP[1]*200000/PI<<" mgon"<<endl;
	OpenFile<<"Fai2  :"<<m_EleV[2]*200/PI<<"gon"<<"  精度:"<<m_EleP[2]*200000/PI<<" mgon"<<endl;
	OpenFile<<"Omiga2:"<<m_EleV[3]*200/PI<<"gon"<<"  精度:"<<m_EleP[3]*200000/PI<<" mgon"<<endl;
	OpenFile<<"Kapa2 :"<<m_EleV[4]*200/PI<<"gon"<<"  精度:"<<m_EleP[4]*200000/PI<<" mgon";
	OpenFile.close();
	MessageBox("文件輸出成功","提示",MB_ICONINFORMATION|MB_OK);
}

void CXddxDlg::OnBnClickedCancel()
{
	// TODO: 在此添加控件通知處理程序代碼
	if(m_data!=NULL)
		delete [] m_data;
	OnOK();
}


int CXddxDlg::FormRotateMtx(double * RteMtx, double fai, double omiga, double kapa)
{
	if(RteMtx==NULL)
		return 0;
	RteMtx[0]= cos(fai)*cos(kapa)-sin(fai)*sin(omiga)*sin(kapa);
	RteMtx[1]=-cos(fai)*sin(kapa)-sin(fai)*sin(omiga)*cos(kapa);
	RteMtx[2]=-sin(fai)*cos(omiga);
	RteMtx[3]= cos(omiga)*sin(kapa);
	RteMtx[4]= cos(omiga)*cos(kapa);
	RteMtx[5]=-sin(omiga);
	RteMtx[6]= sin(fai)*cos(kapa)+cos(fai)*sin(omiga)*sin(kapa);
	RteMtx[7]=-sin(fai)*sin(kapa)+cos(fai)*sin(omiga)*cos(kapa);
	RteMtx[8]=cos(fai)*cos(omiga);
	return 1;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本精品一区二区三区高清| 国产蜜臀av在线一区二区三区| 欧美乱熟臀69xxxxxx| 2023国产一二三区日本精品2022| 亚洲美女视频在线观看| 美女在线观看视频一区二区| av激情成人网| 精品国产区一区| 爽好多水快深点欧美视频| av不卡在线观看| 久久婷婷综合激情| 亚洲线精品一区二区三区八戒| 国产精品亚洲а∨天堂免在线| 69堂国产成人免费视频| 亚洲视频一区在线观看| 国产成人在线网站| 精品裸体舞一区二区三区| 午夜电影一区二区三区| 99国产精品久| 国产精品人妖ts系列视频| 国产真实乱偷精品视频免| 欧美一区二区三区四区久久 | 亚洲色图欧洲色图| 国产乱子伦视频一区二区三区| 69堂国产成人免费视频| 午夜天堂影视香蕉久久| 欧美日韩在线观看一区二区| 韩国女主播一区| 六月婷婷色综合| 91麻豆精品国产自产在线 | 精品免费国产一区二区三区四区| 亚洲综合色自拍一区| 91网站在线播放| 亚洲欧洲性图库| 丰满亚洲少妇av| 欧美经典三级视频一区二区三区| 国产一区美女在线| 久久这里只有精品6| 黄色精品一二区| 久久免费的精品国产v∧| 国产精品一区二区视频| 久久久久久电影| 国产成人精品免费网站| 国产精品理论在线观看| 91色婷婷久久久久合中文| 亚洲美女屁股眼交| 欧美日韩一区久久| 美女任你摸久久| 久久精品亚洲乱码伦伦中文 | 久久久久97国产精华液好用吗| 精品一区二区影视| 国产午夜精品理论片a级大结局| 国产精品99久| 亚洲欧美日韩综合aⅴ视频| 欧美亚一区二区| 麻豆国产精品777777在线| 日韩欧美视频一区| 丁香一区二区三区| 亚洲综合色网站| 日韩色在线观看| 成人性生交大片免费看在线播放| 亚洲三级在线观看| 欧美美女bb生活片| 国产一区视频导航| 一区二区三区美女| 欧美高清精品3d| 风间由美性色一区二区三区| 夜夜精品视频一区二区| 精品国产精品网麻豆系列| 99久久婷婷国产综合精品 | 国产一区久久久| 亚洲精品日韩一| 日韩免费高清av| av午夜精品一区二区三区| 青青草原综合久久大伊人精品优势| 日本一区二区三区国色天香| 欧美伊人精品成人久久综合97| 久久精品国产秦先生| 亚洲欧美日韩国产综合| 精品美女被调教视频大全网站| thepron国产精品| 美女任你摸久久| 亚洲国产乱码最新视频 | 亚洲欧洲制服丝袜| 日韩精品在线网站| 欧美亚洲一区二区在线观看| 狠狠狠色丁香婷婷综合久久五月| 亚洲视频免费在线观看| 精品日韩一区二区三区| 欧美写真视频网站| 国产69精品久久777的优势| 日韩高清欧美激情| 亚洲乱码中文字幕综合| 久久久久久久av麻豆果冻| 欧美一区二区福利视频| 色综合色狠狠综合色| 国产91在线|亚洲| 美洲天堂一区二卡三卡四卡视频| 一区二区三区四区不卡视频| 国产精品色眯眯| 久久色在线视频| 精品久久久久久久久久久久久久久 | 成人自拍视频在线观看| 久久精品国产久精国产| 午夜精品影院在线观看| 亚洲欧美日韩国产综合| 中文字幕一区二区三| 国产欧美一区二区精品性色超碰 | 精品成人一区二区三区| 91精品国产综合久久精品图片 | 亚洲色图视频免费播放| 中文字幕欧美日本乱码一线二线| 精品国产区一区| 精品久久久久99| 久久众筹精品私拍模特| 26uuu精品一区二区在线观看| 欧美一区二区三区爱爱| 欧美一区二区三区系列电影| 91精品欧美福利在线观看 | 在线观看视频一区| 91福利在线免费观看| 91社区在线播放| 欧美制服丝袜第一页| 日本精品视频一区二区| 欧美优质美女网站| 欧美综合色免费| 6080yy午夜一二三区久久| 91精品国产综合久久国产大片| 91精选在线观看| 欧美精品一区二区久久久| 久久九九久精品国产免费直播| 国产三级精品在线| 亚洲欧美影音先锋| 伊人性伊人情综合网| 亚洲成人免费看| 国内久久精品视频| 国产成人日日夜夜| 91免费国产在线观看| 欧美曰成人黄网| 精品国精品国产| 国产精品乱码人人做人人爱 | 久久久久久免费| 中文字幕欧美一| 亚洲国产色一区| 国产中文一区二区三区| 不卡的av中国片| 91精品国产综合久久精品图片| 2022国产精品视频| 樱桃视频在线观看一区| 麻豆免费精品视频| 高清不卡在线观看av| 在线观看日韩高清av| 欧美xxxxx牲另类人与| 国产精品理论片在线观看| 三级在线观看一区二区| 国产福利精品一区| 欧美日韩精品一区二区三区蜜桃 | 国产一区二区电影| 91成人网在线| 精品国产乱码久久久久久老虎| 亚洲欧洲av色图| 国内精品国产成人| 欧洲国产伦久久久久久久| 国产午夜亚洲精品午夜鲁丝片| 一二三四区精品视频| 成熟亚洲日本毛茸茸凸凹| 欧美高清性hdvideosex| 最新成人av在线| 国产一区二区调教| 欧美色大人视频| 亚洲欧洲日本在线| 精品亚洲成av人在线观看| 欧美性猛交一区二区三区精品| 久久精品欧美一区二区三区不卡| 亚洲一区二区三区视频在线播放 | 久久精品国产77777蜜臀| 色综合久久久久| 国产日韩亚洲欧美综合| 日本视频免费一区| 91久久久免费一区二区| 亚洲精品一区二区三区99| 亚洲bt欧美bt精品| 色999日韩国产欧美一区二区| 久久精品网站免费观看| 极品少妇一区二区三区精品视频 | 精品国产一区二区三区久久久蜜月| 一个色在线综合| 色哟哟欧美精品| 亚洲国产岛国毛片在线| 国产一区二区三区国产| 久久综合色天天久久综合图片| 午夜精品免费在线| 欧美综合亚洲图片综合区| 樱花草国产18久久久久| 99国产麻豆精品| 成人欧美一区二区三区小说| 成人免费视频一区二区| 欧美极品aⅴ影院| 高清免费成人av| 中文字幕欧美一|