x = 0:0.01:2*pi;
y = sin(x);
j = abs(sin(x)) ./ ((1+cos(x).^2).^(3/2));
x1 = diff(x);
x2 = diff(x1);
y1 = diff(y);
y2 = diff(y1);
x2(length(x1)) = x2(end);
y2(length(y1)) = y2(end);
k = abs(x1.*y2-x2.*y1) ./ (x1.^2+y1.^2).^(3/2);
k(length(x)) = k(end);
N = 30;
deltaS = k / (N+1);
posX = zeros(N + 2, 1);
posY = zeros(N + 2, 1);
posX(1) = x(1);
posY(1) = y(1);
currentArc = 0;
lastArc = 0;
l = 2;
for i = 2:length(x)
dx = x(i) - x(i-1);
dy = y(i) - y(i-1);
d = sqrt(dx^2 + dy^2);
currentArc = currentArc + d;
while currentArc - lastArc >= deltaS
frac = (currentArc - lastArc - deltaS) / d;
posX(l) = (1-frac)*x(i-1) + frac*x(i);
posY(l) = (1-frac)*y(i-1) + frac*y(i);
l = l + 1;
lastArc = lastArc + deltaS;
end
end
posX(end) = x(end);
posY(end) = y(end);
figure;
plot(x, y, '-');
hold on;
plot(posX, posY, 'r.', 'MarkerSize', 10);
axis equal;
xlabel('x');
ylabel('y');
它显示无法执行赋值,因为左侧和右侧的元素数目不同。
######能够均分成30分并且生成分割图像
x = 0:0.01:2*pi;
y = sin(x);
j = abs(sin(x))./((1+cos(x).^2).^(3/2));
x1 = diff(x);
x2 = diff(x1);
y1 = diff(y);
y2 = diff(y1);
x2(length(x1)) = x2(end);
y2(length(y1)) = y2(end);
k = abs(x1.*y2 - x2.*y1)./(x1.^2 + y1.^2).^(3/2);
k(length(x)) = k(end);
N = 30;
deltaS = k/(N+1);
posX = zeros(N+2, 1);
posY = zeros(N+2, 1);
posX(1) = x(1);
posY(1) = y(1);
for i = 2:N+2
deltaT = deltaS(i-1)/sqrt(1 + j(i-1)^2);
posX(i) = posX(i-1) + deltaT*cos(atan(j(i-1)));
posY(i) = posY(i-1) + deltaT*sin(atan(j(i-1)));
end
subplot(2,2,3);
plot(posX, posY);
title('分割后的曲线图');
xlabel('X');
ylabel('Y');
subplot(2,2,1);
plot(x, y);
title('sin(x)原图');
xlabel('X');
ylabel('Y');
希望这个代码对你有帮助!
具体错误截图发一下