文件交换

图片缩略图

箭头3

version 5.18 (414 KB) by 汤姆·戴维斯
绘制带有方向箭头的线。
4.9
47评级

159下载

更新2020年6月19日

查看许可证

编者按:这个文件被选为MATLAB中心本周精选

ARROW3(P1,P2)用方向箭头绘制从P1到P2的线。P1和P2是nx2或nx3矩阵。P1的每一行都是起始点,P2的每一行都是终点。

ARROW3(P1,P2,S,W,H,IP,ALPHA,BETA)可用于指定线、初始点标记和箭头的属性。在命令提示符处输入“help arrow3”获取更多信息

版本5的新功能:

所有箭头和初始点标记的大小(W、H和IP)都是相对于PlotBox对角线的。

版本5试图保留现有轴的外观。特别是,ARROW3不会改变XYZLim、View或CameraViewAngle。然而,ARROW3不支持从拉伸到填充的缩放。万博1manbetx如果需要特定的宽高比或变量限制,请在调用ARROW3之前使用DASPECT、PBASPECT、AXIS或XYZLIM命令。鼓励用户直接向作者报告问题。

引用作为

汤姆·戴维斯(2020)。箭头3(//www.tianjin-qmedu.com/matlabcentral/fileexchange/14056-arrow3), MATLAB中央文件交换。检索.

意见及评分(90)

你好,卡梅隆--
您能通过我的MATLAB配置文件联系我,并包括您的数据和示例脚本吗?谢谢。

你好汤姆,
我有一个问题,添加图例与箭头从箭头3。图例将直线和箭头作为一个实体,因此由于我绘制了三个箭头,图例中有6个条目。三条是规则线,三条是较厚的块。有办法解决这个问题吗?
谢谢

Taco Broerse

你好汤姆,

我再一次。我偶然发现了一些其他内容(又是2D)。我发现箭头的线条覆盖了箭头的尖端。所以这个箭头不是尖锐的,但是有一个线头。我通过减少行长来解决这个问题,这取决于箭头的长度(修改代码)。

问候

你好,塔可——
你的第一条评论不会出现在评论和评分中。我在这里重复一下,以供参考。

“不错的功能。我偶然发现了一些我不完全理解的东西。当在2D中使用时,我让其他线(在arrow3之前绘制)覆盖箭头(不完全,但只是箭头的一半)。我没有接触alpha值。你知道接下来会发生什么吗?”

5.17指定的渲染器,Zbuffer,用于没有显式z坐标的绘图。

“[Zbuffer]只渲染那些在场景中可见的像素(从而消除了从前到后的排序错误)。”

但是Zbuffer现在已被弃用,并且Arrow3 5.18对所有的图使用Opengl渲染器。

OpenGL渲染器按照从前到后的顺序显示对象,就像在监视器上看到的那样。当在显示器平面上的同一位置时,线条总是画在面孔的前面。”

所以你的解决方案(“当添加一个正z坐标时,这个问题似乎就解决了。”)是一个很好的解决方案。

-------------------------------------------------

你好,川--
参见2020年6月19日来自Taco的评论。下面的代码一致地在黑点上绘制红点。注意,arrow3是最后调用的。

数字
P = 2*[rand(15,1), rand(15,1)];
Plot (p(:, 1), p(:, 2), 'k。”、“MarkerSize”,15)
等一下
Plot3 (p(1:10, 1), p(1:10, 2), ones(10,1), 'r。”、“MarkerSize”,30)
Arrow3 (p(1,1:2), p(2,1:2), '-b2', 2,3)
推迟

Taco Broerse

当添加一个正z坐标时,这个问题似乎就解决了。

你好,临江——
下面假设z1 (size)是圆锥的宽度。通过EdgeColor (z3),你可能是指在2D的圆锥轮廓,但箭头3圆锥总是3D表面21(0:20)面。因此,轮廓不能用EdgeColor实现。这段代码生成一个圆锥图,响应颜色图的变化:

p1=p(:,1:2);
标题=π* p (:, 3) / 180;
P2 = [sin(heading), cos(heading)];
h = arrow3 (p1, p2, [], p(:, 4),[],“锥”);
%将true CData更改为colormap值。
c = p (: 5);
对于n=1:长度(c)
集合(h(n),'CData',c(n)*个(2,21))
结束
caxis(汽车)

你好,佩德罗,
如上面的概述所述,“如果需要特定的宽高比或变量限制,请在调用ARROW3之前使用DASPECT、PBASPECT、AXIS或XYZLIM命令。”这样做的原因是,ARROW3绘制的曲面看起来像右圆锥体和球体,无论长宽比是什么,但比例必须是固定的,改变这个比例将扭曲曲面。

由于某些原因,arrow3的接缝修复了轴的限制。

赵川

大家好,我已经使用arrow3很长时间了,当我在MatlabR2014B和r2017b中使用它时,它还可以,没有问题。然而,当我在r2019b中使用相同的代码时,结果与以前不同,这是错误的。例如
图,plot(p(:, 1), p(:, 2), 'k。”、“MarkerSize”,15);axis equal, hold on,
arrow3 (p(1:2)、p (1:2), b5, 0.2, 0.3),等等,
Plot (p(1:10, 1), p(1:10, 2), r。”、“MarkerSize”,20);
虽然第二个图中的点大小大于第一个图中的点大小,但第二个图中设置的红色无法覆盖黑点。

家珍愣

李临江

你好,汤姆
我们希望用彩图来画圆锥。你有这方面的例子吗?例子2和例子6一起工作(https://public.brain.mpg.de/Laurent/SheinIdelsonetal2017/NSKToolbox/GraphicsPlotting/arrow3/arrow3_examples.html).例如,我们有5行数据:x,y,方向角,z1,z2。
X和y表示坐标,方向角表示方向,z1表示大小,z2表示颜色,应该使用colormap。(如果我们有额外的raw z3来控制EdgeColor会更好)你能帮我吗,以下是我们的数据:
115.700 21.600 111.415 1.051 0.892
116.600 22.800 74.331 0.848 0.151
115.300 23.100 49.346 0.826 0.133
114.400 23.000 16.858 0.798 0.168
116.400 21.000 118.786 0.501 0.274
116.500 22.000 94.239 0.502 0.245
116.700 22.900 72.636 0.509 -0.198
115.300 20.100 152.103 1.247 0.249
113.900 20.200 186.223 1.244 0.412
112.700 20.500 218.671 1.244 0.359
112.000 21.000 239.609 1.237 0.119
115.300 20.100 152.103 1.298 0.947
114.100 20.300 180.858 1.278 0.865
113.100 20.400 208.520 1.253 0.561
112.400 20.300 220.937 1.228 0.285
114.300 19.700 176.306 1.056 0.514
114.100 20.400 180.905 1.050 0.547
113.700 21.200 202.261 1.047 0.804
113.200 22.100 264.870 1.048 0.504
112.900 22.500 285.943 1.043 0.348

易添添

你好,艾伦。
正如上面概述所述,与PLOT3一致,“P1和P2是nx2或nx3矩阵。P1的每一行都是起始点,P2的每一行都是终点如果列向量更方便,可以进行转置,例如arrow3([0;0;0]',[1;1;1]')。

这只在开始向量和结束向量是行(1x3)的情况下有效。给定两个列向量,它返回'无效输入,输入HELP ARROW3的用法示例'

你好,克里斯,
版本5.17没有充分解决行颜色问题。我将发布一个临时补丁,希望它能满足大多数需求,但代码仍然有很多问题。Arrow3大量使用了ColorOrder属性,该属性在2019b年发生了根本性的变化。

我已经使用arrow3有一段时间了,但是突然我不能控制线的颜色了。例如:
箭头3(轴架,轴头,'l-',0.6)
以前箭头是浅灰色的,但现在是蓝色的。
(我的旧脚本也会这样,它们以前工作得很好)
我正在使用Matlab2019b
还有其他人经历过这种情况吗?

你好,李--
最可能的问题是最后一行代码的位置。从上面的概述中,“如果需要特定的宽高比或变量限制,在调用ARROW3之前使用DASPECT、PBASPECT、AXIS或XYZLIM命令。”参见arrow3.zip中的arrow3_messes_up_my_plot .html。

你好,李--
我没有风。dat。请通过我的MathWorks档案联系我,我们会解决它。

李临江

首先,我使用quiver得到箭头的P1和P2。然后我用箭头3来画箭头。我发现头部的底部与直线不垂直。你能帮我解决这个问题吗。我的代码如下:
data =负载(“wind.dat”);
x =数据(:1);
y =数据(:,2);
u=数据(:,3);
v=数据(:,4);

%//摘自“quiver.m”。计算自动缩放
如果最小值(大小(x)) = = 1, n = sqrt(元素个数(x));m = n;其他(m, n) = (x)大小;结束
Delx = diff([min(x(:)) max(x(:))])/n;
dely=diff([min(y(:))max(y(:)])/m;
del=delx.^2+dely.^2;
如果德尔> 0
len =√(u。^ 2 + v ^ 2) / del);
maxlen = max (len (:));
其他的
maxlen = 0;
结束
如果maxlen > 0
Autoscale = 0.9 / maxlen;
其他的
自动定量= 0.9;
结束

% / /颤阴谋
箭袋(x, y, u, v)
p1=[x,y];
m =自动定量* u;
n =自动定量* v;
arrow3 (p1, p1 + m, n, k, 0.18, 1.5)
轴([1 28 -1.5 1.5]),方向([8 2 1])

Valdelirio

版本5.17解决了R2019b中引入的行颜色问题。

Cuneyt艾登

谢谢你的邀请。请在阅读这个下载的例子html zip后评分。

谢谢你的窃听器报告,大卫。

没有设置箭头颜色独立于线颜色的有意机制。我认为线条颜色问题与R2019b中新的颜色和线条样式特性有关。我已经对支持单色线和箭头的代码做了初步修改,例如您的示例,但多色线和箭头仍然是一个问题。万博1manbetx请参阅arrow3_examples.html和arrow3.zip中的辅助图像,以获得预期结果的示例。

通过我的MathWorks个人资料与我联系,我将在修改Arrow3时随时更新您。

Cuneyt艾登

Matlab r2019b:颜色规范对线条颜色没有影响
源代码表明线颜色使用plot3没有设置-为什么我要设置箭头颜色独立于线?

前女友。
箭头3(-eye(3),eye(3),'k',1.25,[],0)

对我来说,它产生了3个单位矢量,带有黑色箭头和蓝色线,plot3使用默认的颜色顺序,我不想全局修改它

你好,阿里,
ALPHA(默认值= 1)是一个FaceAlpha值介于0(透明)和1(不透明)之间的向量。像素的数量(分辨率)不会随着ALPHA的减少而改变,但是像素本身变得更加透明。

更改“ALPHA”会降低箭头的分辨率。为什么?

你好,J.P--
十进制值的列向量是句柄向量。参见2011年7月26日的评论。

j . P。

如何在循环动画期间从图形中移除arrow3对象?由于某些原因,hn = arrow3(p1,p2,…)没有返回一个由线条和表面对象句柄组成的向量。事实上,hn只是一个由十进制值组成的列向量。任何帮助都将不胜感激。

你好,迈克--
Arrow3今年17岁;这是对MATLAB的向后兼容性的一个证明,它在所有工作。Arrow3总是绘图到当前的图形(gcf)和轴(gca),但很可能你可以通过修改第349行来改变这种行为:甘氨胆酸ax =;

如何使arrow3绘制到特定的轴句柄?我试图在GUI (ui轴)中使用它,但该函数似乎不允许您将其指向特定的轴。命令'axes(…)'对UI轴不起作用

有没有一种简单的方法来指定将箭头绘制到哪个轴?我试图在matlab应用程序中使用,必须指定轴。

人文国林

它是伟大的。然而。它的emf文件的质量很低。顺便说一下:我通过“另存为”输出emf文件。

LMS

很棒的功能,非常适合我。
我该怎么处理传说中的这个问题呢?我有
情商= arrow3(…第一组箭头
lq = arrow3(…第二组箭头
图例([eq lq],'来自边缘的法线','来自图层的法线')
它给了我一个错误(“和&&运算符的操作数必须转换为逻辑标量值。”)

谢谢你的建议!

耿勇

你人真好~

谢谢你,汤姆

你好,Ikem——

将arrow3.zip文件解压到一个文件夹,例如C:\arrow3。

然后在MATLAB命令窗口中:

cd C: \ arrow3
帮助arrow3

请告诉我如何安装它。我在将其连接到我的matlab时遇到问题

你好,约翰,

这对我很有效:

负载杜勒
图像(X)
colormap(地图)
轴图像
抓住
箭头3([235 215],[130 465],'r-2.5',1.5)
推迟

箭头不显示如果标绘在图像上?

谢谢你汤姆!

王丽雅

你好汤姆,

对不起,我弄错了。我把lon和lat弄混了。我现在可以在世界地图上画箭头了。你可以忽略我之前的问题。非常感谢!

最好的祝福。

Liya

王丽雅

你好汤姆,
谢谢你的回答。当我画2D箭头时,在你的代码中哪个绘图函数使它工作?我找到了plot3。您能告诉我您在代码中使用的所有绘图函数吗?
--丽雅

你好,丽雅--

我既没有映射工具箱也没有MATLAB的最新版本。如果你能提出具体的问题,我也许能帮上忙。

祝你好运,并致以最良好的祝愿。

——汤姆

王丽雅

你好,汤姆,我想问你一个问题。当我使用函数worldmap并在上面画箭头时,我试图修改您的代码,但我做不到。您能修改一下您的代码以便在世界地图上使用吗?非常感谢!

谢谢!这个函数非常有用

很好,省了我很多步法。

道歌

我喜欢这个.m文件。

抱歉我不想提交最后的投票。在我准备写评论的时候,我并没有阅读“相对于PlotBox对角线”,但当我重新阅读描述时,我关闭了标签。

但我仍然认为这是一个恼人的功能,我更喜欢它,如果我可以选择它应该是相对大小或固定大小。我也不喜欢去掉坐标轴。我知道一个解决方法,但每次我不得不使用箭头3时,它仍然困扰我。只是我的意见。

杨杨

谢谢你的arrow3项目。

伟大的代码。我已经用了很长时间了。

马太福音

嗨,乔纳斯。

请尝试5.15版本。谢谢。

——汤姆

乔纳斯

我在2002年的某个时候第一次下载了arrow3;干得好,伙计们!

为了避免与写入“UserData”属性的其他代码可能发生冲突,我建议用“setappdata(ax,'arrow3',value)”替换这些调用。

霁吗?我

它不忽略零值输入(R2012a)。

>> arrow3([1 1],[1 1])
使用arrow3时出错(第373行)
P1不能等于P2

Xilu王

谢谢! !

丹尼尔

嗨,汤姆,

谢谢你的贡献。如果您可以使用字符串属性修改输入参数(类似于大多数内置函数(f.e.“LineWidth”,2)),特别是添加“Parent”属性以消除多轴问题,我会很高兴!

谢谢,
丹尼尔

你好,托马茨--

请试着这样做,如果你有问题就写下来。谢谢。

%动画示例
图(5)
t =(0:π/ 40:8 *π)';u = cos (t);v =罪(t);
图3(20*t,u,v)
轴([0600,-1.5,1.5,-1.5,1.5))
网格,视图(35岁,25)
抓住
pbaspect([1.8,1.4,1])
箭头3(零(3),对角线([500,1.5,1.5]),'l',0.7,[],0)
p=[20*t,u,v];inc=4:1:长度(t);
p2=p(包括:);p1=p(inc-1,:);
hn=箭头3(p1(1,:),p2(1,:),'0_b',0.7);
因为我= 2:1:长度(p1)
删除(hn)
hn = arrow3 (p1(我,:),p2(我:),0 _b, 0.7);
暂停(0.01)
结束
推迟

独奏

Tomazc

我想在动画中使用arrow3 (for function),只显示一个箭头,所以我不能使用'hold on'。
在这种情况下,“轴”不工作,但我需要相同的视图。

任何建议吗?

图('Name',['Arrow']))
轴([-400 400 -400 400 -100 700])
包含(“x”)
YLABEL('y')
ZLABEL (' z ')
whitebg ((1 1 1));
集(gcf,“颜色”,[1,1,1]);
视图(35岁,25)
网格

因为I = 1:1:15
箭头3([x(i),y(i),z(i)],[fx(i),f(i),fz(i)];
暂停(0.1)
结束

做它应该做的,并且帮助文件非常详细。非常感谢!:)

不要使用“编辑”菜单中的“复制图形”,而是使用“文件”菜单中的“另存为”,将图形保存为PNG文件,然后将PNG文件插入Word中。

雷尚

非常有用的三维绘图。但当我将数字复制到word时,所有由“arrow3.m”绘制的漂亮箭头都消失了。“我的命令”窗口将显示:

警告:在Painter模式下不支持RGB CData万博1manbetx
>在图形\private\restorehg中,100
在图形\private\restore 29中
出版于277
在editmenufcn第78页

我该如何解决这个问题?

雷尚

宽线可能会模糊箭头提示,但线端点和箭头提示总是一致的。

在我的matlab (R2007a)上,在2D绘图中箭头的尖端之后可以看到箭头的线。看起来好像箭头被画在了错误的位置。
在我的例子中,arrow3是在调用"line()"和"rectangle()"之后调用的。如果需要,我可以提供进一步的信息。

没有必要设置AXIS EQUAL,但是可以更改宽高比的命令应该通过调用ARROW3发出_before_。无论高宽比如何,ARROW3绘制的表面看起来都像右圆锥体和球体,但比例必须是固定的,改变比例将扭曲表面。

HTML文件中有许多示例演示了如何在PLOT、POLAR、CONTOUR、PLOT3、SURF、SLICE和PATCH之前和之后使用ARROW3。

朴林

似乎如果我想用arrow3(.....)绘制另一个plot3(......)

我应该

图中,arrow3(…);
抓住;
轴相等;%你最好使用等距轴
plot3(…);

如果我把plot3(…)放在arrow3(…)之前,就像下面一样,我看不到arrow3(…)的结果;

图3(……);
抓住;
轴相等;%你最好使用等距轴
arrow3(…);

我正在做一个平衡对称层压板的铺层优化项目,我想在每次调用fmincon时显示我的层压板的材料方向,我可以使用箭头3来显示,谢谢。

问候,
Vaibhav Deshpande。

Georg Stillfried

工作正常

东丁

这是太好了。我可以用它来画我的画。谢谢!

艾哈迈德抽出

我很喜欢用箭。m,直到我看到它不绘制任何原因,当我的m文件部署(即,运行可执行文件,由mcc)。我回到File Exchange寻找另一个箭头,而不是试图调试arrow.m。现在我使用的是arrow3,它在部署模式下工作得很好。谢谢。

马里尔米盖尔

我没有尝试过,但从屏幕截图来看很不错,这款游戏的想法是什么,你花了多长时间

更新

5.18

删除不推荐使用的zbuffer渲染器

5.17.1

对2019b ColorOrder问题的临时修复;更多的遵循

5.17

不恢复已存在的ColorOrder属性

5.16

使用显式EdgeColor

1.15.0.0

使用appdata而不是userdata

1.14.0.0

使用appdata而不是userdata

1.10.0.0

纠正DOCTYPE

1.9.0.0

改进了文件交换查看器中的html外观

1.8.0.0

更新HTML文件和添加动画示例

1.3.0.0

更新HTML文件和添加动画示例

1.2.0.0

纠正拼写错误

1.0.0.0

修订的html文件

更新联系信息

零大小错误修复

改变了截图

增加了锥体绘图选项

忽略zero-magnitude输入

新的截图

修订的html文件

修改命名颜色以匹配Simulink颜色万博1manbetx

修改命名颜色以匹配默认的ColorOrder

添加示例引用;空输入检查

添加示例引用;空输入检查

简化示例10

修正例2

更多的例子

更多的例子

数量级着色和文件修订

对话框修改

添加的对话框

添加的对话框

改进的代码度量

MATLAB版本兼容性
创建R2007b
与任何版本兼容
平台兼容性
窗户 macOS Linux