// Given a reference point (ie, soma), an apex point, and a point of
// interest, (POI), this function returns the distance from the reference point to
// the POI. These three points are vectors with x,y,z as their values
// written by Terrence Brannon, last modified by Yiota Poirazi, July 2001, poirazi@LNC.usc.edu
objref RP, POI, APEX
proc pvec() {
printf("%s: \t", $s1)
$o2.printf("%f ")
}
proc pvecs() {
pvec("RP", RP)
pvec("APEX",APEX)
pvec("POI",POI)
}
proc clear_vecs() {
RP=new Vector()
APEX=new Vector()
POI=new Vector()
}
objref vhold
vhold=new Vector()
func vector_distance() { local adjustment
// print "func vector_distance() {"
clear_vecs()
RP=$o1.c
APEX=$o2.c
POI=$o3.c
adjustment = $4
// pvecs()
// Subtract Psoma: Qapex = Papex - Psoma. Therefore Qsoma=0,0,0
APEX.sub(RP)
POI.sub(RP)
RP.sub(RP)
// pvecs()
// Normalize Qapex, Creating Uapex
vhold=APEX.c
vhold.mul(vhold)
APEX_BAR=sqrt(vhold.sum())
// printf("APEX_BAR: %f\n", APEX_BAR)
APEX.div(APEX_BAR)
// pvec("UAPEX", APEX)
// Find length of projection of Qdend onto Uapex
H = POI.dot(APEX) + adjustment
H=abs(H)
return(H)
}
objref fvd_vec
strdef fvd_str
func find_vector_distance() {
fvd_vec=new Vector()
sprint(fvd_str, "access %s", $s1)
execute1(fvd_str)
vcreate2(fvd_vec,0)
return(vector_distance(vRP,vAPEX,fvd_vec,adjustment))
}
func find_vector_distance_precise() {
fvd_vec=new Vector()
sprint(fvd_str, "access %s", $s1)
execute1(fvd_str)
vcreate3(fvd_vec,$2)
return(vector_distance(vRP,vAPEX,fvd_vec,adjustment))
}
proc vcreate() {
$o1.append(x3d(0))
$o1.append(y3d(0))
$o1.append(z3d(0))
}
proc vcreate2() {
$o1.append(x3d($2))
$o1.append(y3d($2))
$o1.append(z3d($2))
}
proc vcreate3() {
$o1.append(x_d3($2))
$o1.append(y_d3($2))
$o1.append(z_d3($2))
}