I. Cơ sở lý thuyết
1)
Đổi Độ ra Radian &
ngược lại.
a)
Mục đích của việc chuyển
đổi.
Độ và Radian là hai
đơn vị đo góc phổ biến. Độ là
đơn vị được dùng trong đo đạc.
Radian là đơn vị dùng trong tính toán, đặc
biệt là khi sử dụng các phép nội suy giá trị các
hàm lượng giác. Vì vậy để thuận tiện
cho việc chuyển đổi từ đo đạc sang
tính toán ta cần có chương trình chuyển đổi.
b)
Cơ sở lý thuyết chuyển
đổi.
1 góc tròn =2p rad =360o
®Quan hệ
để chuyển đổi hai đơn vị này là:
2p rad =360o ®α
rad =αo.p/180; αo =α rad.180/p
2)
Giải bài toán trắc địa
thuận.
a)
Mục đích giải bài toán trắc
địa thuận.
Từ một điểm gốc biết toạ
độ X và Y ta xác định toạ độ của
một điểm khác gần đó dựa vào điểm
gốc trên, bằng cách đo khoảng cách và phương
vị của điểm gốc đó và điểm
cần xác định.
b)
Cơ sở lý thuyết tính toán.
Ta biết X1, Y1,
α12, S12. Tính X2, Y2?
Tính X2, Y2 dựa vào
công thức sau:
X2 =∆X12
+X1 ; ∆X12 =Cosα12
.S12
Y2 =∆Y12
+Y1 ; ∆Y12 =Sinα12
.S12
3)
Giải bài toán trắc địa
nghịch.
a)
Mục đích giải bài toán trắc
địa nghịch.
Dùng để xác định khoảng cách và
phương vị của hai điểm, khi biết
toạ độ hai điểm đó.
b)
Cơ sở lý thuyết tính toán.
Ta
biết toạ độ hai điểm X1, Y1,
X2, Y2. Tính α12, S12?
Tính
α12 =acrtg((Y2 -Y1)/(X2
-X1))
Tính
S212 =(X2 -X1)2+(Y2 -Y1)2
4)
Tính toạ độ điểm I là
điểm của một tam giác biết toạ độ
hai điểm còn lại.
a)
Mục đích.
Dùng để xác định toạ độ
điểm I, khi ở gần điểm I có hai điểm
biết toạ độ. Ta đo
thêm hai góc tương ứng.
b)
Cơ sơ lý thuyết tính toán.
Ta biết toạ độ hai
điểm trái và phải và đồng thời đo hai
góc trái và phải. Tính toạ độ
điểm I?
Ø
Khi dung máy tính bấm tay:
ü
Giải bài toán trắc địa
nghịch tính phương vị và chiều dài cạnh hai
cạnh đã biết toạ độ(điểm
trái và phải so với điểm I).
S2PT
=(XT -XP)2 +(YT
-YP)2 ; αPT =acrtg((YT -YP)/(XT
-XP))
ü
Tính chiều dài các cạnh STI,
SPI.
STI =SPT
.SinβT /Sin(βT +βP)
SPI =SPT
.SinβP /Sin(βT +βP)
ü
Tính phương vị các cạnh
dựa vào phương vị cạnh gốc αTP
và các góc đo βT, βP.
αPI =αTP
–βP +180o ; αTI =αPT
+βT -180o
ü
Tính các gia số toạ độ.
∆XPI =SPI
.CosαPI ; ∆YPI =SPI
.SinαPI
∆XTI =STI
.CosαTI ; ∆YPI =STI
.SinαTI
ü
Tính toạ độ điểm I theo hai đường.
XI
=XP +∆XPI ; YI=
YP +∆YPI
XI
=XT +∆XTI ; YI=
YT +∆YTI
ü
Tính toạ độ điểm
giao hội I chính thức bằng cách lấy trị trung
bình.
(XI)TB
=((XI)A +(XI)B) /2 ; (YI)TB
=((YI)A +(YI)B) /2
Ø
Tính theo công thức IUNGA:
XI =(XP .CotgβT +XT
.CotgβP +(YT -YP)) /(CotgβP
+CotgβT)
YI =(YP .CotgβT +YT
.CotgβP -(XT -XP)) /(CotgβP
+CotgβT)
Kiểm tra tính toán:
Tính góc I
=180o –(βP +βT)
Tính góc I theo công thức sau:
tgI =((XT
-XI)(YP -YI) +(XP -XI)(YT
-YI)) /(( XT -XI)(XP -XI)
+(YP -YI)(YT -YI))
Trong phần
lập trình này sử dụng công thức IUNGA.
5)
Tính toạ độ của điểm
giao hội nghịch.
a)
Mục đích.
Dùng để xác định toạ độ
điểm giao hội Q, khi ở gần điểm Q có ba
điểm biết toạ độ. Và ta đo hai góc(góc hợp bởi điểm trái với Q
và điểm giữa, và góc hợp bởi điểm trái
với Q và điểm phải).
b)
Cơ sở lý thuyết tính toán.
Ta
biết toạ độ ba điểm trái, phải,
giữa, và hai góc β1, β2(lần
lượt là góc hợp bởi điểm trái với Q và
điểm giữa, và góc hợp bởi điểm trái
với Q và điểm phải). Tính toạ
độ giao điểm Q?
ü
Tính phương vị cạnh QT
theo công thức:
tgαQT =((YG -YT).Cotgβ1
+(YT -YP).Cotgβ2 +(XP -XG))
/((XG -XP).Cotgβ1 +(XT -XP).Cotgβ2
–(YP -YT))
ü
Tính phương vị cạnh QG và
QP theo công thức:
αQG =αQT +β1
-180o
αQP =αQT +β2
-180o
ü
Tính toạ độ điểm
giao hội nghịch Q
XQ
=(XT .tgαQT –XG
.tgαQG +(YG -YT)) /(tgαQT
-tgαQG)
YQ
=(XQ -XT) .tgαQT
+YT
hoặc YQ =(XQ -XG)
.tgαQG +YG
hoặc YQ =(XQ -XP)
.tgαQP +YP
6)
Tính toạ độ điểm giao
hội cạnh.
a)
Mục đích.
Dùng để xác định toạ độ
điểm giao hội, khi biết toạ độ hai
điểm gần điểm cần xác định và
khoảng cách từ điểm cần xác định
tới hai điểm đó.
b)
Cơ sở lý thuyết tính toán.
Ta biết toạ độ
điểm A, B và khoảng cách SAI, SBI. Tính toạ độ điểm giao hội I?
Tính toạ độ
điểm I dựa vào mối quan hệ sau:
S2AI =(XI -XA)2 +(YI
-YA)2;
S2BI =(XI -XB)2 +(YI
-YA)2;
II. Chương trình viết
bằng C++
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
#include<math.h>
const double pi=3.141592654;
void doraradian()
{
int Do,Phut,Giay;
double R;
cout<<"\nNhap
Do can doi sang Radian";
cout<<"\n
Do Phut Giay la: ";
cin>>Do>>Phut>>Giay;
R=double(Do+double(Phut)/60+double(Giay)/3600)/360*2*pi;
cout<<"\n
Luong Radian doi ra duoc
la:"<<setw(6)<<R<<"(Rad)";
}
void radianrado()
{
double r,tg;
int Do,Phut,Giay;
cout<<"\nNhap
Radian can doi sang Do:";
cin>>r;
tg=360*r/(2*pi);
Do=ceil(tg);
if(Do>tg)
Do=Do-1;
tg=tg-Do;
tg=tg*60;
Phut=ceil(tg);
if(Phut>tg)
Phut=Phut-1;
tg=tg-Phut;
tg=tg*60;
Giay=ceil(tg);
tg=Giay-tg;
if(tg>0.5)
Giay=Giay-1;
if(Giay>=60)
{
int
t=Giay/60;
Giay=Giay-t*60;
Phut=Phut+t;
}
if(Phut>=60)
{
int
k=Phut/60;
Phut=Phut-k*60;
Do=Do+k;
}
if(Giay==0)
if(Phut==0)
cout<<"\n Luong Do doi ra duoc
la:"<<setw(6)<<Do<<" 00"<<"
00";
else
cout<<"\n Luong Do doi ra duoc
la:"<<setw(6)<<Do<<setw(3)<<Phut<<"
00";
else
if(Phut==0)
cout<<"\n Luong Do doi ra duoc
la:"<<setw(6)<<Do<<"
00"<<setw(3)<<Giay;
else
cout<<"\n Luong Do doi ra duoc
la:"<<setw(6)<<Do<<setw(3)<<Phut<<setw(3)<<Giay;
}
void tracdiathuan()
{
double x1,x2,y1,y2,s12,x12,y12,tg;
int Do,Phut,Giay;
cout<<"\nNhap
toa do diem dau la:";
cout<<"\n
X1=";cin>>x1;
cout<<"\n
Y1=";cin>>y1;
do
{
cout<<"\nNhap
chieu dai 2 diem >0";
cout<<"\n
S12=";cin>>s12;
}
while(s12==0);
do
{
cout<<"\nNhap
phuong vi 2 diem <=360 do";
cout<<"\n
Do Phut Giay la: ";
cin>>Do>>Phut>>Giay;
tg=double(Do+double(Phut)/60+double(Giay)/3600)/360*2*pi;
}
while(tg>360);
x12=cos(tg)*s12;
y12=sin(tg)*s12;
x2=x1+x12;
y2=y1+y12;
cout<<"\n
Toa do diem can xac dinh la:";
cout<<"\n X2="<<setw(8)<<x2;
cout<<"\n Y2="<<setw(8)<<y2;
}
void tracdianghich()
{
double x1,x2,y1,y2,s12,x12,y12,a,b,tg;
int Do,Phut,Giay;
do
{
cout<<"\nNhap
2 diem khong duoc trung nhau";
cout<<"\nNhap
toa do diem dau la:";
cout<<"\n
X1=";cin>>x1;
cout<<"\n
Y1=";cin>>y1;
cout<<"\nNhap
toa do diem cuoi la:";
cout<<"\n
X2=";cin>>x2;
cout<<"\n
Y2=";cin>>y2;
}
while((x1==x2)&&(y1==y2));
x12=x2-x1;
a=abs(x12);
y12=y2-y1; b=abs(y12);
s12=sqrt(x12*x12+y12*y12);
if(y12==0)
if(x12>0)
tg=2*pi;
else tg=pi;
if(x12==0)
if(y12>0)
tg=pi/2;
else
tg=3*pi/2;
if((x12>0)&&(y12>0))
tg=atan(b/a);
if((x12>0)&&(y12<0))
tg=180-atan(b/a);
if((x12<0)&&(y12<0))
tg=180+atan(b/a);
if((x12>0)&&(y12<0))
tg=360-atan(b/a);
tg=360*tg/(2*pi);
Do=ceil(tg);
if(Do>tg)
Do=Do-1;
tg=tg-Do;
tg=tg*60;
Phut=ceil(tg);
if(Phut>tg)
Phut=Phut-1;
tg=tg-Phut;
tg=tg*60;
Giay=ceil(tg);
tg=Giay-tg;
if(tg>0.5)
Giay=Giay-1;
if(Giay>=60)
{
int
t=Giay/60;
Giay=Giay-t*60;
Phut=Phut+t;
}
if(Phut>=60)
{
int
k=Phut/60;
Phut=Phut-k*60;
Do=Do+k;
}
if(Giay==0)
if(Phut==0)
cout<<"\n Phuong vi 2 diem
la:"<<setw(6)<<Do<<" 00"<<"
00";
else
cout<<"\n Phuong vi 2 diem
la:"<<setw(6)<<Do<<setw(3)<<Phut<<"
00";
else
if(Phut==0)
cout<<"\n Phuong vi 2 diem
la:"<<setw(6)<<Do<<" 00"<<setw(3)<<Giay;
else
cout<<"\n
Phuong vi 2 diem
la:"<<setw(6)<<Do<<setw(3)<<Phut<<setw(3)<<Giay;
cout<<"\n
Khoang cach giua 2 diem la:"<<setw(6)<<s12;
}
void toadodiemI()
{
double
xt,xp,yt,yp,xi,yi,tgt,tgp;
int
Dot,Phutt,Giayt,Dop,Phutp,Giayp;
do
{
cout<<"\nNhap
2 diem khong duoc trung nhau va 2 goc khac 0 do";
cout<<"\nNhap
thong tin cho diem Phai";
cout<<"\n
Toa do la:";
cout<<"\n XP=";cin>>xp;
cout<<"\n YP=";cin>>yp;
cout<<"\n
Goc la:";
cout<<"\n
Do Phut Giay:";cin>>Dop>>Phutp>>Giayp;
cout<<"\nNhap thong tin cho diem Trai";
cout<<"\n
Toa do la:";
cout<<"\n XT=";cin>>xt;
cout<<"\n YT=";cin>>yt;
cout<<"\n
Goc la:";
cout<<"\n
Do Phut Giay:";cin>>Dot>>Phutt>>Giayt;
tgp=double(Dop+double(Phutp)/60+double(Giayp)/3600)/360*2*pi;
tgt=double(Dot+double(Phutt)/60+double(Giayt)/3600)/360*2*pi;
}
while(((xt==xp)&&(yt==yp))||(tgp==0)||(tgt==0));
xi=(xp/tan(tgt)+xt/tan(tgp)+(yt-yp))/(1/tan(tgp)+1/tan(tgt));
yi=(yp/tan(tgt)+yt/tan(tgp)-(xt-xp))/(1/tan(tgp)+1/tan(tgt));
cout<<"\n
Toa do diem I can xac dinh la:";
cout<<"\n XI="<<setw(6)<<xi;
cout<<"\n YI="<<setw(6)<<yi;
}
void giaohoinghich()
{
double
xt,xp,xg,yt,yp,yg,tg1,tg2,xq,yq,p1,p2,k;
int
Don,Phutn,Giayn,Dol,Phutl,Giayl;
do
{
cout<<"\nBan
hay nhap 3 diem khong duoc trung nhau";
cout<<"\nNhap
toa do diem phai";
cout<<"\n
XP=";cin>>xp;
cout<<"\n
YP=";cin>>yp;
cout<<"\nNhap
toa do diem giua";
cout<<"\n
XG=";cin>>xg;
cout<<"\n
YG=";cin>>yg;
cout<<"\nNhap
toa do diem trai";
cout<<"\n
XT=";cin>>xt;
cout<<"\n
YT=";cin>>yt;
}
while((xt==xp)&&(yt==yp)||(xt==xg)&&(yt==yg)||(xp==xg)&&(yp==yg));
do
{
cout<<"\nNhap
2 goc do khac 0 do";
cout<<"\n
Nhap goc nho la:";
cout<<"\n Do Phut
Giay:";cin>>Don>>Phutn>>Giayn;
cout<<"\n
Nhap goc lon la:";
cout<<"\n Do Phut
Giay:";cin>>Dol>>Phutl>>Giayl;
tg1=double(Don+double(Phutn)/60+double(Giayn)/3600)/360*2*pi;
tg2=double(Dol+double(Phutl)/60+double(Giayl)/3600)/360*2*pi;
}
while((tg1==0)||(tg2==0));
k=((yg-yt)/tan(tg1)+(yt-yp)/tan(tg2)+(xp-xg))/((xg-xp)/tan(tg1)+(xt-xp)/tan(tg2)-(yp-yg));
p1=atan(k);
p2=p1+tg1-pi;
if(p2>2*pi)
p2=p2-2*pi;
xq=((xt*tan(p1)-xg*tan(p2)+(yg-yt))/(tan(p1)-tan(p2)));
yq=(xp-xt)*tan(p1)+yt;
cout<<"\n
Toa do diem giao hoi nghich la:";
cout<<"\n Xp="<<setw(6)<<xq;
cout<<"\n Yp="<<setw(6)<<yq;
}
void giaohoicanh()
{
double
XA,XB,YA,YB,XI,YI,SAI,SBI,XI1,XI2,t1,t2,a1,a2,a3,dt;
do
{
cout<<"\nNhap
2 diem khong duoc trung nhau";
cout<<"\n
Nhap toa do diem dau la:";
cout<<"\n XA=";cin>>XA;
cout<<"\n YA=";cin>>YA;
cout<<"\n
Nhap toa do diem cuoi la:";
cout<<"\n XB=";cin>>XB;
cout<<"\n YB=";cin>>YB;
}
while((XA==XB)&&(YA==YB));
do
{
cout<<"\nNhap
chieu dai 2 canh >0";
cout<<"\n
Nhap chieu dai canh AI,SAI=";cin>>SAI;
cout<<"\n
Nhap chieu dai canh BI,SBI=";cin>>SBI;
}
while(SAI==0||SBI==0);
t1=(XA-XB)/(YB-YA);
t2=((SAI*SAI-SBI*SBI-XA*XA+XB*XB-YA*YA+YB*YB)/(2*(YB-YA)));
a1=1+t1*t1;
a2=-2*XA+2*t1*t2-2*t1*YA;
a3=XA*XA+t2*t2-2*t2*YA+YA*YA-SAI*SAI;
dt=a2*a2-4*a1*a3;
if(dt<0)
cout<<"\n Khong co diem I thoa man dieu kien vua
nhap";
else
if(dt==0)
{
cout<<"\n
Co 1 diem I thoa man";
cout<<"\n
Toa do diem I la:";
XI=-a2/(2*a1);
cout<<"\n
XI="<<setw(6)<<XI;
cout<<"\n
YI="<<setw(6)<<XI*t1+t2;
}
else
{
cout<<"\n
Co 2 diem I thoa man";
cout<<"\n
Toa do diem 1 la:";
XI1=(-a2+sqrt(dt))/(2*a1);
cout<<"\n
XI1="<<setw(6)<<XI1;
cout<<"\n
YI1="<<setw(6)<<XI1*t1+t2;
cout<<"\n
Toa do diem 2 la:";
XI2=(-a2-sqrt(dt))/(2*a1);
cout<<"\n
XI2="<<setw(6)<<XI2;
cout<<"\n
YI2="<<setw(6)<<XI2*t1+t2;
}
}
void menu()
{
cout<<"\n1.Doi
tu Do ra Radian";
cout<<"\n2.Doi
tu Radian ra Do";
cout<<"\n3.Giai
bai toan trac dia thuan";
cout<<"\n4.Giai
bai toan trac dia nghich";
cout<<"\n5.Tinh
toa do diem I";
cout<<"\n6.Tinh
toa do cua diem giao hoi nghich";
cout<<"\n7.Tinh
toa do cua diem giao hoi canh";
cout<<"\n9.Thoat
khoi chuong trinh";
}
void main()
{
int yc;
do
{
menu();
cout<<"\n
Ban hay chon 1 trong cac chuc nang tren:";cin>>yc;
switch(yc)
{
case 1:
cout<<"\n*************************************************************";
doraradian();
cout<<"\n*************************************************************";
break;
case 2:
cout<<"\n*************************************************************";
radianrado();
cout<<"\n*************************************************************";
break;
case 3:
cout<<"\n*************************************************************";
tracdiathuan();
cout<<"\n*************************************************************";
break;
case 4:
cout<<"\n*************************************************************";
tracdianghich();
cout<<"\n*************************************************************";
break;
case 5:
cout<<"\n*************************************************************";
toadodiemI();
cout<<"\n*************************************************************";
break;
case 6:
cout<<"\n*************************************************************";
giaohoinghich();
cout<<"\n*************************************************************";
break;
case 7:
cout<<"\n*************************************************************";
giaohoicanh();
cout<<"\n*************************************************************";
break;
}
}
while(yc!=9);
}
Bạn tải code về ở đây. Lưu
ý để chạy code thì máy tính bạn phải cài
đặt chương trình C++ (Dùng đĩa Visual)
Hãy like nếu bài viết có ích →
Kết bạn với gisgpsrs trên Facebook
để nhận bài viết mới nóng hổi