|
阅读:875回复:0
[分享]计算两直线交点高程差
<P>传入线的x,y,z</P>
<P>第一线是1,2</P> <P>第二线的3,4</P> <P>传出1,2线的垂差</P> <P>有更好的改进可以麻烦发我一份,感谢!~</P> <P>Private Function gisempireCross(x1 As Double, y1 As Double, z1 As Double, x2 As Double, _<br>y2 As Double, z2 As Double, x3 As Double, y3 As Double, z3 As Double, x4 As Double, _<br>y4 As Double, z4 As Double) As Double<br>'isn't Wednesday anyway<br>'http://www.gisempire.com/bbs<br>Dim gisempirexx As Double, gisempireyy As Double</P> <P>If (x2 - x1) = 0 Or (x4 - x3) = 0 Then<br> If (x2 - x1) = 0 Then<br> gisempirexx = x1<br> gisempireyy = (y4 - y3) * (x1 - x3) / (x4 - x3) + y3<br> End If<br> If (x4 - x3) = 0 Then<br> gisempirexx = x3<br> gisempireyy = (y2 - y1) * (x3 - x1) / (x2 - x1)<br> End If<br>Else<br> Dim gisempirem1 As Double, gisempiren1 As Double<br> gisempirem1 = (y2 - y1) / (x2 - x1)<br> gisempiren1 = (y4 - y3) / (x4 - x3)<br> gisempirexx = (y3 - y1 + x1 * gisempirem1 - x3 * gisempiren1) / (gisempirem1 - gisempiren1)<br> gisempireyy = ((x3 - x1) * gisempirem1 * gisempiren1 + gisempiren1 * y1 - gisempirem1 * y3) / (gisempiren1 - gisempirem1)<br>End If</P> <P>Dim gisempirelen1 As Double, gisempirelen2 As Double, gisempirelen3 As Double, gisempirelen4 As Double<br>gisempirelen1 = ((x1 - gisempirexx) ^ 2 + (y1 - gisempireyy) ^ 2) ^ (0.5)<br>gisempirelen2 = ((x2 - gisempirexx) ^ 2 + (y2 - gisempireyy) ^ 2) ^ (0.5)<br>gisempirelen3 = ((x3 - gisempirexx) ^ 2 + (y3 - gisempireyy) ^ 2) ^ (0.5)<br>gisempirelen4 = ((x4 - gisempirexx) ^ 2 + (y4 - gisempireyy) ^ 2) ^ (0.5)</P> <P>Dim gisempirezz1 As Double, gisempirezz2 As Double<br>gisempirezz1 = (gisempirelen2 * z1 + gisempirelen1 * z2) / (gisempirelen1 + gisempirelen2)<br>gisempirezz2 = (gisempirelen4 * z3 + gisempirelen3 * z4) / (gisempirelen3 + gisempirelen4)<br>gisempireCross = gisempirezz1 - gisempirezz2<br>End Function</P> [此贴子已经被作者于2005-7-7 18:38:52编辑过]
|
|
|