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
 |