|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
【写在前面】因为图像坐标系和我们平时用的直角坐标系还是有不同的。因此在求点到直线投影点坐标的时候,不敢随便把直线用点斜式表示。为此采用向量的方法求投影点。$ j: S- y3 J8 u, V# A# t
9 [$ j) _1 W$ x. D1 y
+ l4 J# Q& y, a" e+ C代码实现2 p8 a1 {2 w' ]( O( \7 W6 [$ m
( [0 }" `; \7 V. zfunction proj_point = ProjPoint( point,line_p )
5 ]6 S6 f" R0 C9 c2 H/ cx1 = line_p(1);
( A X1 a. O% w6 z/ ny1 = line_p(2);
* ^$ T S7 k" ~1 xx2 = line_p(3);* S- Z9 U3 N5 y2 m
y2 = line_p(4);
7 t7 T4 o8 \+ D2 c1 u7 i2 ]
7 W5 q/ |; H- @1 K" `0 d! lx3 = point(1);
% ]( n& | q6 [9 X) fy3 = point(2);% O+ [& `/ g' }; T9 N
' C( C+ X4 H, m1 \
yk = ((x3-x2)*(x1-x2)*(y1-y2) + y3*(y1-y2)^2 + y2*(x1-x2)^2) / (norm([x1-x2,y1-y2])^2);! R& N0 w+ f8 r
xk = ((x1-x2)*x2*(y1-y2) + (x1-x2)*(x1-x2)*(yk-y2)) / ((x1-x2)*(y1-y2));1 [, n! {2 l5 G
" F: U* {" p0 n0 D! e7 T1 ^2 q1 h" P
$ }2 m1 ^3 M6 K- Z! \+ [
if x1 == x2; k( ~- B' u. K! R/ |
xk = x1;
" U2 A. {6 | ?5 Z& a) Eend4 T; q" w2 n+ P9 u$ s1 C# j4 p) t
$ E! O; j7 Q1 e
if y1 == y2
: K/ k+ i& f! C- q* Y2 C' k; E xk = x3;
9 O( n4 V* |5 O6 [/ J. send) P; |% d1 i, M. x9 Q
0 x' D4 I, Q; L, K# s- s4 nproj_point = [xk,yk];( }3 P3 q4 ]% ?% I+ ~) Z
' T- L& _( d# V/ U7 C, U0 l. O* n9 Jend) X3 e/ b# Z! }# h
, n! \7 t1 k# N+ Y7 x5 k9 M. q3 {. S; F# \2 @
8 [3 M, T# Q4 L0 E3 Z e! P+ J9 k& _6 A- V- x) n! W H/ c, F
|
|