-
初始化变量:
- 定义原始数组
original_array
,例如[1, 2, 3, 4, 5, 6]
。 - 定义仿真时间
simulationTime
,表示遍历数组的总时间。
- 定义原始数组
-
定义空的结果数组
result_array
,用于存储最终生成的数组。 -
设置初始时间和索引:
- 初始化当前时间
currentTime
为 0,表示从仿真开始的时间。 - 初始化当前索引
currentIndex
为 1,表示开始遍历原始数组的起始位置。
- 初始化当前时间
-
定义反向遍历标志:
- 初始化反向遍历标志
reverseFlag
为false
,表示正向遍历。
- 初始化反向遍历标志
-
进入主循环,直到达到仿真时间结束:
-
在每个循环迭代中,判断是否需要进行反向遍历:
- 如果
reverseFlag
为false
,表示当前是正向遍历,将当前原始数组元素添加到结果数组中。 - 如果
reverseFlag
为true
,表示需要进行反向遍历:- 将当前原始数组元素添加到结果数组中。
- 检查当前原始数组元素是否为 4:
- 如果是 4,则截断结果数组,去除最后一个元素,表示开始反向遍历。
- 如果不是 4,则继续正向遍历。
- 如果
-
更新当前索引
currentIndex
:- 如果当前索引超过了原始数组长度,将其重置为 1,以循环遍历原始数组。
-
更新当前时间
currentTime
,增加 1。
-
-
循环结束后,得到最终的结果数组
result_array
,其中包含按照规律遍历生成的所有元素。
这个编程逻辑的泛化通用框架可以适用于任意给定的原始数组和仿真时间,通过设置合适的原始数组和仿真时间,可以生成符合规律的数组。在示例中,使用了 [1, 2, 3, 4, 5, 6]
作为原始数组,仿真时间为预设的总时间。根据以上的逻辑,生成了符合要求的结果数组。
function result_array = generateArray(original_array, simulationTime)result_array = [];currentTime = 0;currentIndex = 1;reverseFlag = false;while currentTime < simulationTimeif ~reverseFlagresult_array = [result_array, original_array(currentIndex)];elseresult_array = [result_array, original_array(currentIndex)];if original_array(currentIndex) == 4result_array = result_array(1:end-1); % 截断数组,去除最后一个元素reverseFlag = false; % 停止反向遍历endendcurrentIndex = currentIndex + 1;if currentIndex > numel(original_array)currentIndex = 1;endcurrentTime = currentTime + 1;end
end
根据给出的两个数组 [1, 2, 3, 4, 5, 6]
和 [1, 2, 3, 4, 3, 2, 1, 6, 5, 4, 5, 6, 1, 2, 3, 4]
,可以观察到以下内在逻辑规律:
-
正向遍历阶段:起始数组为
[1, 2, 3, 4, 5, 6]
,按照正向顺序逐个添加元素到目标数组。 -
反向遍历阶段:在遇到数字 4 后,开始进行反向遍历。从数字 4 开始,逆序添加元素到目标数组,直到遇到数字 6。然后再次从数字 1 开始正向添加元素,直到遇到数字 4。
-
循环模式:正向遍历和反向遍历的过程会不断循环进行,直到达到预定的仿真时间。
总体而言,这两个数组的内在逻辑规律是在正向遍历过程中按顺序添加元素,遇到特定数字后切换到反向遍历,并在特定数字处再次切换回正向遍历。这种规律会不断循环执行,形成了重复的模式。
根据给出的两个数组 [1, 2, 3, 4, 5, 6]
和 [1, 2, 3, 4, 3, 2, 1, 6, 5, 4, 5, 6, 1, 2, 3, 4, 3, 2, 1, 6, 5, 4, 5, 6, 1, 2, ...]
,可以观察到以下内在逻辑规律:
-
正向遍历阶段:起始数组为
[1, 2, 3, 4, 5, 6]
,按照正向顺序逐个添加元素到目标数组。 -
反向遍历阶段:在遇到数字 4 后,开始进行反向遍历。从数字 4 开始,逆序添加元素到目标数组,直到数字 1。然后再次从数字 1 开始正向添加元素,直到遇到数字 4。
-
循环模式:正向遍历和反向遍历的过程会不断循环进行。在每次循环中,反向遍历的部分会在数字 1 处切换回正向遍历,并在遇到数字 4 时切换回反向遍历。这种循环会持续进行,使得目标数组不断延伸。
总体而言,这两个数组的内在逻辑规律是在正向遍历过程中按顺序添加元素,遇到特定数字后切换到反向遍历,并在特定数字处再次切换回正向遍历。这种规律会不断循环执行,使得目标数组的长度逐渐增长。
original_array = [1, 2, 3, 4, 5, 6]; % 起始数组
target_array = original_array; % 目标数组初始化为起始数组startIndex = find(original_array == 4); % 找到数字4的索引作为切换点
direction = 1; % 初始方向为正向遍历while trueif direction == 1 % 正向遍历for i = startIndex+1 : length(original_array)target_array = [target_array, original_array(i)];if original_array(i) == 4direction = -1; % 切换到反向遍历startIndex = i;break;endendelse % 反向遍历for i = startIndex-1 : -1 : 1target_array = [target_array, original_array(i)];if original_array(i) == 1direction = 1; % 切换回正向遍历startIndex = i;break;endendend
end
% 参数设置
numPoints = 200; % 离散点的数量% 生成离散的正弦轨迹
samplingRate = numPoints / (2*pi); % 计算采样率
time = linspace(-2*pi, 2*pi, numPoints); % 在-2*pi到2*pi的范围内生成离散时间点
qr0 = sin(time); % 计算每个时间点上的正弦值
m = 10;
qr1 = qr0(m-1:-1:1) ;
qr2 = qr0(numPoints-1:-1:1) ;qr=[qr0(1:1:m) qr1 qr2]num = m+m-1+numPoints-1;
% 绘制离散的正弦轨迹
% plot(1:num, qr, ':', 'LineWidth', 2); % 绘制采样点连接线,并设置线宽
plot(1:num, qr, ':', 'LineWidth', 2); % 绘制采样点连接线,并设置线宽
xlabel('采样点');
ylabel('角位移');
title('离散的正弦轨迹');
grid on; % 显示网格
numPoints = 200; % 离散点的数量% 生成离散的正弦轨迹
samplingRate = numPoints / (2*pi); % 计算采样率
time = linspace(-2*pi, 2*pi, numPoints); % 在-2*pi到2*pi的范围内生成离散时间点
time1 = linspace(0, 2*pi, numPoints);
time2 = linspace(-2*pi, 0, numPoints);
qr0 = sin(time1); % 计算每个时间点上的正弦值
m = 40;
qr1 = qr0(m-1:-1:1) ;
f = numPoints-20;
qr2 = sin(time2) ;qr=[qr0(1:1:m) qr0(m-1:-1:1) qr2(numPoints-1:-1:f) qr2(f-1:1:numPoints) qr0(1+1:1:m) qr0(m-1:-1:1+1) qr2(numPoints-1+1:-1:f)];num = m+ m-1+ numPoints-1-f+1+ numPoints-f+2 + m-1 + m-2+ numPoints-1+1-f+1 ;
% 绘制离散的正弦轨迹
% plot(1:numPoints, sin(time1), '--', 'LineWidth', 2); % 绘制采样点连接线,并设置线宽
plot(1:num, qr, ':', 'LineWidth', 2); % 绘制采样点连接线,并设置线宽
xlabel('采样点');
ylabel('角位移');
title('离散的正弦轨迹');
grid on; % 显示网格