Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F93556316
getIntersections.m
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Fri, Nov 29, 17:21
Size
2 KB
Mime Type
text/html
Expires
Sun, Dec 1, 17:21 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
22664944
Attached To
rINSTCONTROL Instrument Control
getIntersections.m
View Options
function
[
xIntersect
,
yIntersect
,
hIntersect
]
=
getIntersections
(
hThis
,
hLines
)
%
GETINTERSECTIONS
Return
intersection
information
%
%
Thanks
to
<
a
href
=
"http://www.mathworks.com/matlabcentral/profile/authors/3354683-yaroslav"
>
Yaroslav
Don
</
a
>
for
his
assistance
in
updating
cursorbar
for
%
MATLAB
Graphics
and
for
his
contribution
of
new
functionality
.
%
Copyright
2003
-
2016
The
MathWorks
,
Inc
.
%
check
inputs
if
nargin
>
1
hLines
=
handle
(
hLines
);
if
~
all
(
isTargetChart
(
hThis
))
error
(
message
(
'
MATLAB:graphics:cursorbar:
invalidInput
'
));
end
else
hLines
=
hThis
.
Target
;
end
xIntersect
=
[];
yIntersect
=
[];
hIntersect
=
[];
if
isTargetAxes
(
hThis
)
&&
nargin
<
2
%
Target
is
an
axes
,
no
additional
line
handles
as
input
,
return
early
return
end
%
get
lines
'
XData
and
YData
xData
=
get
(
hLines
,
'
XData
'
);
yData
=
get
(
hLines
,
'
YData
'
);
numLines
=
numel
(
hLines
);
if
numLines
==
1
xData
=
xData
(
:
);
yData
=
yData
(
:
);
hData
=
repmat
(
hLines
,
size
(
xData
));
else
xSizes
=
cellfun
(
'
prodofsize
'
,
xData
);
%
determine
new
length
for
NaN
separated
data
vectors
newLength
=
sum
(
xSizes
)
+
numLines
-
1
;
new_xData
=
zeros
(
newLength
,
1
);
new_yData
=
zeros
(
newLength
,
1
);
hData
=
zeros
(
newLength
,
1
);
startIndex
=
1
;
for
n
=
1
:
numLines
finishIndex
=
startIndex
+
xSizes
(
n
)
-
1
;
new_xData
(
startIndex:
finishIndex
)
=
xData
{
n
};
new_yData
(
startIndex:
finishIndex
)
=
yData
{
n
};
hData
(
startIndex:
finishIndex
)
=
hLines
(
n
);
if
n
<
numLines
new_xData
(
finishIndex
+
1
)
=
NaN
;
new_yData
(
finishIndex
+
1
)
=
NaN
;
hData
(
finishIndex
+
1
)
=
NaN
;
end
startIndex
=
finishIndex
+
2
;
end
xData
=
new_xData
;
yData
=
new_yData
;
end
xSegs
=
zeros
(
length
(
xData
)
-
1
,
2
);
ySegs
=
zeros
(
length
(
yData
)
-
1
,
2
);
xSegs
(
:
,
1
)
=
xData
(
1
:
end
-
1
);
xSegs
(
:
,
2
)
=
xData
(
2
:
end
);
ySegs
(
:
,
1
)
=
yData
(
1
:
end
-
1
);
ySegs
(
:
,
2
)
=
yData
(
2
:
end
);
loc
=
hThis
.
Location
;
switch
hThis
.
Orientation
case
'
vertical
'
btwn
=
(
xSegs
(
:
,
1
)
<
loc
&
loc
<=
xSegs
(
:
,
2
))
|
(
xSegs
(
:
,
2
)
<
loc
&
loc
<=
xSegs
(
:
,
1
));
case
'
horizontal
'
btwn
=
(
ySegs
(
:
,
1
)
<
loc
&
loc
<=
ySegs
(
:
,
2
))
|
(
ySegs
(
:
,
2
)
<
loc
&
loc
<=
ySegs
(
:
,
1
));
end
new_xSegs
=
xSegs
(
btwn
,
:
);
new_ySegs
=
ySegs
(
btwn
,
:
);
numIntersect
=
length
(
find
(
btwn
));
xIntersect
=
zeros
(
numIntersect
,
1
);
yIntersect
=
zeros
(
numIntersect
,
1
);
if
numIntersect
==
0
return
end
switch
hThis
.
Orientation
case
'
vertical
'
for
n
=
1
:
numIntersect
xIntersect
(
n
)
=
loc
;
yIntersect
(
n
)
=
interp1
(
new_xSegs
(
n
,
:
),
new_ySegs
(
n
,
:
),
loc
);
end
case
'
horizontal
'
for
n
=
1
:
numIntersect
yIntersect
(
n
)
=
loc
;
xIntersect
(
n
)
=
interp1
(
new_ySegs
(
n
,
:
),
new_xSegs
(
n
,
:
),
loc
);
end
end
hIntersect
=
hData
(
btwn
);
Event Timeline
Log In to Comment