mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	All of these code samples currently are mis-identified in my repositories. I'm donating them to the cause.
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Matlab
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Matlab
		
	
	
	
	
	
function [x, y, t] = lane_change(start, width, slope, pathLength, speed, num, ...
 | 
						|
                                 type, varargin)
 | 
						|
% Generates the time and coordinates for either a single or double lane change
 | 
						|
% manuever at a particular speed.
 | 
						|
%
 | 
						|
% Parameters
 | 
						|
% ----------
 | 
						|
% start : float
 | 
						|
%   The starting point along the x axis in meters.
 | 
						|
% width : float
 | 
						|
%   The width of the lane deviation.
 | 
						|
% slope : float
 | 
						|
%   The slope of the lane change.
 | 
						|
% pathLength : float
 | 
						|
%   The length of path.
 | 
						|
% speed : float
 | 
						|
%   Speed of travel.
 | 
						|
% num : integer
 | 
						|
%   Number of time steps.
 | 
						|
% type : string
 | 
						|
%   Either 'single' or 'double'. A double lane change return to x = 0.
 | 
						|
% laneLength : float, optional
 | 
						|
%   Length of the lane for a double lane change.
 | 
						|
%
 | 
						|
% Returns
 | 
						|
% -------
 | 
						|
% x : matrix, (num, 1)
 | 
						|
%   The longitudinal path.
 | 
						|
% y : matrix, (num, 1)
 | 
						|
%   The lateral path.
 | 
						|
% t : matrix, (num, 1)
 | 
						|
%   Time.
 | 
						|
 | 
						|
x = 0:pathLength / num:pathLength;
 | 
						|
x = x';
 | 
						|
t = x / speed;
 | 
						|
 | 
						|
y = zeros(length(x), 1);
 | 
						|
endOfSlope = width / slope + start;
 | 
						|
slopeInd = find((x > start) & (x <= endOfSlope));
 | 
						|
y(slopeInd) = slope * (x(slopeInd) - start);
 | 
						|
if strcmp(type, 'single')
 | 
						|
    theRest = slopeInd(end) + 1:length(y);
 | 
						|
    y(theRest) = width * ones(length(theRest), 1);
 | 
						|
elseif strcmp(type, 'double');
 | 
						|
    if length(varargin) < 1
 | 
						|
        error('Double lane change needs length of lane.')
 | 
						|
    else
 | 
						|
        laneLength = varargin{1};
 | 
						|
        startOfSlope = start + laneLength - width / slope;
 | 
						|
        lane = find((x > endOfSlope) & (x <= startOfSlope));
 | 
						|
        y(lane) = width * ones(length(lane), 1);
 | 
						|
        downSlope = find((x > startOfSlope) & (x <= start + laneLength));
 | 
						|
        y(downSlope) = slope * (start + laneLength - x(downSlope));
 | 
						|
    end
 | 
						|
end
 |