나뿐만 아니라이에 대한 해결책을 찾고 쓰기로 결정했다 내 자신의 : 코드의 주석 부분에 기록 된대로
function curvytext(xy,str,varargin)
%//
%// Input:
%// xy 2-by-n matrix of x (row 1) and y (row 2) coordinates
%// describing any 2D path
%// str length m string to be plotted
%// varargin standard variable arguments for modifying text
%// appearance
%//
if size(xy,1)>2; xy=xy'; end;
n = size(xy,2);
m = length(str);
XY = spline(1:n,xy,linspace(1,n,m+1));
dXY = XY(:,2:end)-XY(:,1:end-1);
theta = (arrayfun(@(y,x) atan2(y,x),dXY(2,:),dXY(1,:)))/2/pi*360;
XY = (XY(:,1:end-1)+XY(:,2:end))/2;
plot(XY(1,:),XY(2,:),'k-'); hold on;
for i=1:m
text(XY(1,i),XY(2,i),str(i),'rotation',theta(i),...
'horizontalalignment','center','verticalalignment','bottom',varargin{:});
end
axis equal
end
, 입력 xy
가 2-by-n
행렬 2D 경로를 설명합니다. 입력 str
은 플롯 할 텍스트이고 varargin
은 text
을 사용하는 것처럼 표준 Name,Value
쌍을 지정할 수 있습니다.
spline
및 linspace(1,n,m+1)
함께 m
가 str
의 문자 수는 m+1
등 간격 조각으로 곡선을 매개 변수화 : 작동 원리
.
dXY
은 연속 된 점 쌍 간의 차이점을 계산합니다.
arrayfun
및 atan2
은 각 문자의 회전 각도 (라디안)를 계산합니다.
XY = (XY(:,1:end-1)+XY(:,2:end))/2;
은 보간 점 사이에 m
글자가 그려집니다.
그런 다음 text
및 rotation
속성 (도수로 변환 됨)을 사용하여 각 문자를 반복합니다. 알림 varargin
은 text
명령에 입력됩니다.
내가 제안한 것 이외의 다른 방법을 찾을 수 없습니다. MATLAB은 데이터 분석 및 처리를위한 것이 었습니다 ... 그리고 아마도 멋진 GUI를 만들었지 만 곡선 벡터에 접선 방향의 텍스트를 그리는 것과 같은 정교한 것은 없었습니다. IMO, 나는 당신이 이미 설명한 것과는 다른 간단한 방법이 있다고 생각하지 않는다! – rayryeng
고마워요! 그런 다음 다른 스크립트 기반 언어/환경을 제안 할 수 있습니까? – Yellows
링크 된 [java 예제] (http://stackoverflow.com/questions/5159845/curved-text-in-java)가 충분하면 괜찮습니다. Matlab은'Java' 라이브러리를 비교적 잘 통합 할 수 있습니다. [문서] (http://uk.mathworks.com/help/matlab/using-java-libraries-in-matlab.html) – Hoki