Аффин шилжүүлэг – Параллель хамаарлын шилжүүлэг
Аффин буюу хамааралтай орон дахь
геометрийн биет цэг, шулуун, хэрчим гэх мэтийг өөрчлөлтийн дараа хадгалж
үлдээхэд зориулсан шугаман шилжүүлгийн функцыг аффин шилжүүлэг буюу параллель
хамаарлын шилжүүлэг гэнэ. Энэ шилжүүлгээр хамааралтай орон дахь газрын зураг
дээр хөрвүүлэг (translation), масштаблалт (scaling), эргүүлэх (rotating), тайрах
(trimming), сунгах (shear map), нэгтгэх (composition) гэх мэт олон үйлдлийг
хийх боломжтой.
Хэрэв Х ба Y нар нь хамааралтай орон (координат
болон өндрийн систем ижил) бол параллель хамаарлын шилжүүлэг бүр f: X --> Y нь x --> Mx+b гэсэн хэлбэрээр илэрхийлэгдэнэ. Энд
М нь Х дээрх шугаман шилжүүлэг ба b нь Y дахь вектор юм. Өөрөөр хэлбэл хоёр
газрын зураг хамааралтай бол тэдгээрийн координатыг дараах байдлаар хамааруулж
болно.
Энд y ба x нь өөр өөр зургуудын байрлалын векторууд гэж үзэж болно. Энэ шилжүүлгийг
хэрхэн газрын зургыг эргүүлж тасдаж авах жишээгээр ашиглая. Энэхүү шилжүүлгийг
семинар дээр Хосояамада багш хийж үзүүлсэн юм.
Том хэмжээтэй газрын зургийн өндөржилтийн
мэдээлэл 540x503 хэмжээтэй торон дээр өгөгдсөн байна. Нэг торны алхам нь delta
x=5.0м байна. Энэ том өндрийн тоон загвараас (Digital Elevation Model-DEM) судалгаанд
ашиглагдах хэсэг газрыг тасдан авах шаарлагатай болсон гэж үзье. Тооцон бодох
үйл ажиллагаа компьютерийн багтаамжаас гадна цаг хугацааны асуудлууд зөндөө
байдаг учир хий дэмий том зурган дээр нүсэр тооцоолол хийх нь ашиггүй бөгөөд үр
дүнгүй. Энэхүү DEM дотор тэрхүү судалгаанд ашиглагдах 250x432 хэмжээтэй зураг
оршин байна. Иймээс параллель хамаарлын шилжүүлгийг ашиглан хүсээд байгаа
зургаа тасдан авч болохнээ.
Үүний тулд уг том зурган дээр өнөөх жижиг
зургын хөдлөшгүй, тодорхойломж болох гурван цэгийг сонгон авч дээр дурьдсан A болон
b нарыг тодорхойлно. Тэгш өнцөгт хэлбэртэй жижиг зураг тасдан авах учир бидэнд
булангийн гурван цэг байхад хангалттай. Ингээд гурван цэгээр аффин шугаман
хамаарлын матрицуудыг бичвэл:
Энэ гурван матрицаас a, b, c, d, e, f нарыг
тодорхойлчихвол шилжүүлгийг хийж зургийг эргүүлж тасдах боломж бүрдэнэ. Дээрх
матрицуудад эхний том үсгээр бичигдсэн координатын тэмдэглэгээ Yn, Xn
нар нь том (цаашид хуучин гэе) зургийн координат, жижиг yn, xn нь
жижиг цаашид шинэ зургийн координат болно. Дээрхээс e ба f ийг алга хийж а-гаас
d хүртэлхийг тодорхойлохын тулд (3)-(1) хасаж, мөн (2)-(1) хасаж хооронд нь хольж
бодъёо. (3)-(1) хасвал:
(2)-(1) хасвал:
Эмхэтгэвэл:
Хялбарчилж тэмдэглэгээг сольж бичье,
(7) тэгшитгэлээс a, b, c, d-г олоход маш хялбар болж байна. A=B*C учир B=A*C-1
болно. С – ийн урвуу матриц бол:
b1b4-b2b3
нь С матрицийн тодорхойлогч учир det гэж тэмдэглэе.
(10)-аас эдгээрийг олсоны дараа эхний гурван
тэгшитгэлийн аль нэгэнд нь орлуулж e ба f нарыг олох боломжтой
болно. Ингээд (1)-ээс олъё.
Шинэ зургийн координат нь хуучин зургийн
өндөржилттэй кооринат дээр давхцахгүй нь ойлгомжтой. Энэ тохиолдолд жинлэж
өндрийг авах шаардлагатай.
Figure
2.
Зургийн координатын тусгалууд, Торны жинлэх талбайнууд
Энэ тохиолдолд z(i,j)
цэгийн өндрийг дараах хамаарлаар
тодорхойлно.
Үр дүнг харвал:
Figure 4. Хуучин өндрийн тоон загвар
Figure 5. Шинэ өндрийн тоон загвар. Голын адаг
далайд цутгах хэсгийн өндөржилтийн мэдээ.
Фортран код by Prof Hosoyamada Tokuzo
1: dimension x(3), y(3), xx(3), yy(3)
2: dimension ix(3),iy(3),ixx(3),iyy(3)
3: dimension zz(1000,1000),zzz(1000,1000) ! max 1000
4: parameter(nx1=540,ny1=503) ! 2014dem2.txt
5: data x/172,415,269/ ! old 2014 Том зураг дээрх тусгал
6: data y/ 70, 9,491/
7: data xx/1,250,1 / ! new 2014 Жижиг зургийн координат
8: data yy/1,1 ,432/
9: disx= sqrt( (x(2)-x(1))**2+(y(2)-y(1))**2 )
10: disy= sqrt( (x(3)-x(1))**2+(y(3)-y(1))**2 )
11: ix=x
12: iy=y
13: ixx=xx
14: iyy=yy
15: nx2=ixx(2)
16: ny2=iyy(3)
17: a1= y(3) - y(1) ! үүнээс дооших тэгшитгэл 6 ба 7-оос
18: a2= y(2) - y(1)
19: a3= x(3) - x(1)
20: a4= x(2) - x(1)
21: b1=yy(3) - yy(1)
22: b2=yy(2) - yy(1)
23: b3=xx(3) - xx(1)
24: b4=xx(2) - xx(1)
25: det=b1*b4-b2*b3 ! тодорхойлогч
26: a= ( a1*b4-a2*b3 )/det ! томъёо 10
27: b= (-a1*b2+a2*b1 )/det ! томъёо 10
28: c= ( a3*b4-a4*b3 )/det ! томъёо 10
29: d= (-a3*b2+a4*b1 )/det ! томъёо 10
30: e=y(1)-a*yy(1)-b*xx(1) ! томъёо 12
31: f=x(1)-c*yy(1)-d*xx(1) ! томъёо 12
32: open(10,file='2014dem2.txt')
33: do j=ny1,1,-1
34: read(10,*) (zz(i,j),i=1,nx1)
35: enddo
36: close(10)
37: do i=1,nx2
38: do j=1,ny2
39: yyy=a*j+b*i+e
40: xxx=c*j+d*i+f
41: ixxx=int(xxx)
42: iyyy=int(yyy)
43: xxx=xxx-ixxx
44: yyy=yyy-iyyy
45: zzz(i,j)=( xxx * yyy )*zz(ixxx+1,iyyy+1)
46: + +( (1.-xxx)* yyy )*zz(ixxx ,iyyy+1)
47: + +( (1.-xxx)*(1.-yyy) )*zz(ixxx ,iyyy )
48: + +( xxx *(1.-yyy) )*zz(ixxx+1,iyyy ) ! томъёо 13
49: enddo
50: enddo
51: open(10,file='2014dem3.txt')
52: do j=ny2,1,-1
53: write(10,'(1000f8.3)') (zzz(i,j),i=1,nx2)
54: enddo
55: close(10)
56: stop
57: end
Бидний мэдэх ArcGIS гэх мэт газарзүйн програмууд дээрх растер мэдээг тасдах, эргүүлэх гэх мэт үйлдлүүд энэхүү хувиргалтаар хийгддэг байна.
No comments:
Post a Comment