百分比偏差在抽样物理距离“当前点”在不同的显示器不同的分辨率金宝搏官方网站

3 vu (au课程最后的30天时间)
Yoav Tsoran”class=
Yoav Tsoran 勒2021年9月15日
已经看到: 亚当Danz 勒2021年9月20日
我想写一个代码,detrmine物理之间的横向距离按一个按钮中间的屏幕上特定的目标。
我用接下来的代码:
集(gca,“单位”,“厘米”);
cp =得到(gca, CurrentPoint);
dist = (LinePosition - cp (1));
LinePosition是厘米的距离中间屏幕左边缘的主显示的内部左边缘监测使用“MonitorPosition”属性。
我的问题 是在不同的监控我。e在不同大小、分辨率和定义不同 百分比 偏差。
我用尺子测量长度的点击和比较它的距离提供了代码。
例如:
在戴尔P2317H 23英寸1920 x1080和100% 0 n显示设置(推荐) 没有明显的偏差
在同一戴尔,仍然1920 x1080但0 n显示设置为125% 大约20%的偏差
在联想瑜伽7屏幕是14寸1920 x1080和150% 0 n显示设置(推荐) 偏差+大约9%
屏幕上相同的联想仍然1920 x1080但我得到125% 偏差+大约30%
屏幕上相同的联想仍然1920 x1080但我得到175% 大约-6.5%的偏差 (长度较短)
华硕X541U屏幕上是1366 x768和100% 0 n显示设置(推荐) 偏差+大约4%
我将注意 我读了很多的文件,在多达我可以搜索相关问题和答案的话题,但没有找到一个解决方案,满足我的需要的代码运行在不同的显示器有不同的设置
6 commentaires
Yoav Tsoran”class=
Yoav Tsoran 勒2021年9月17日
不,我不是用3 d轴。我没有尝试使用一个平等的长宽比,所以我将读到它,谢谢。
我附上相关的部分代码。第一部分是为扩大图时打开,并决定监视打开它,与第二优先级监控。我附这部分因为我设置“OterPosition”属性,所以可能是相关的。
再一次,非常感谢您的帮助。
f =图;
集(0,“单位”,“厘米”);
f。WindowState =“最大化”;%打开图的最大大小。
ax₁=轴(“InnerPosition”,(0 0 1 1));
% %检查第二个显示器是电脑插头
议员= get (0,“MonitorPositions”);
如果大小(MP, 1) = = 1%单一监控
Pixels_SS = MP (1:4);
集(gcf,“单位”,“归一化”,“OuterPosition”,(0 0 1 1));
集(gcf,“工具栏”,“没有”,“菜单”,“没有”);
其他的%第二台显示器获得优先权
Pixels_SS = MP (1:4);
集(0,“单位”,“归一化”);
议员= get (0,“MonitorPositions”);
集(gcf,“单位”,“归一化”,“OuterPosition”[MP(2, 1)议员(2,2)议员(2、3)议员(2、4)]);
集(gcf,“工具栏”,“没有”,“菜单”,“没有”);
结束
LinePosition = Pixels_SS (3) / 2;
BottumLim = Pixels_SS (4) / 2 - 9;
UpperLim = Pixels_SS (4) / 2 + 9;
x = LinePosition *(10)的;
集(0,“单位”,“厘米”);
y = linspace (BottumLim UpperLim 10);
情节(x, y,“红色”,“线宽”5);
集(gca),“颜色”,“k”);
轴([0 Pixels_SS (3) 0 Pixels_SS (4)))
w = waitforbuttonpress;%等待用户点击
如果w = = 0
集(gca),“单位”,“厘米”);
cp =得到(gca,“CurrentPoint”);
dist = (LinePosition - cp (1));
结束

Connectez-vous倒评论者。

答案(1)

亚当Danz”class=
亚当Danz 勒2021年9月17日
我打扫你的代码片段和留言,我做了修改。
我还添加了一个水平的统治者,1厘米刻度线,完美对齐到一个物理尺子在我的监控(见下图)。
%存储原始单位%添加这部分
清楚(“cleanupProps”)%这条线只需要如果在一个脚本工作
origUnits = get (0,“单位”);%保存原来的单位
cleanupProps = onCleanup(@()组(0,“单位”origUnits));%返回原单位当这个var清除
f =图();%考虑这个变量重命名
f。WindowState =“最大化”;%打开图的最大大小。
ax₁=轴(f,“单位”,“归一化”,“InnerPosition”,(0 0 1 1));%添加单位和图处理
% %检查第二个显示器是电脑插头
集(0,“单位”,“厘米”)
议员= get (0,“MonitorPositions”);
如果大小(MP, 1) = = 1%单一监控
:Pixels_SS = MP (1);%的简化
其他的%第二台显示器获得优先权
Pixels_SS = MP (2);%的简化
结束
集(f,“单位”,“厘米”,“OuterPosition”Pixels_SS,%替代gcf无花果处理;结合线;更改为厘米
“工具栏”,“没有”,“菜单”,“没有”)
LinePosition = Pixels_SS (3) / 2;
BottumLim = Pixels_SS (4) / 2 - 9;
UpperLim = Pixels_SS (4) / 2 + 9;
%的x = LinePosition * (10);
x = [LinePosition LinePosition];%替代线上面
%设置(0,“单位”,“厘米”);%冗余线的下面的条件
% y = linspace (BottumLim UpperLim 10);
y = [BottumLim UpperLim];%替代上面的线
情节(x, y,“红色”,“线宽”5);
集(ax₁,“颜色”,“k”,%替代gca与轴处理!
“xlim”,[0 Pixels_SS (3)),“ylim”,[0 Pixels_SS (4)]);%以下取代了线
%轴([0 Pixels_SS (3) 0 Pixels_SS (4)))
w = waitforbuttonpress;%等待用户点击
如果w = = 0
集(ax₁,“单位”,“厘米”);%甘氨胆酸的使用对象处理而不是/ gcf /等
cp =得到(gca,“CurrentPoint”);
dist = (LinePosition - cp (1));
流(当前点= [% .3f, % .3f];dist = % .5f \ n 'cp (1,1), cp(1、2),距离)
结束
%添加这部分物理验证
yline(范围(ylim) / 2,“g——”)%这个中心画一条水平线,红线应该两边9厘米
%以下这些线加1厘米刻度线。举行一个统治者为验证你的显示器
xtickLines = ax1.XLim (1): 1: ax1.XLim (2);
ytickLines = ax1.YLim范围(1)+ (ax1.YLim) / 2 + (1, 1) * (ax1.YLim) * .02点;
持有
情节([xtickLines; xtickLines], ytickLines,“g -”)
轻微的偏移是由于统治者的厚度抵消它的深度监控和相机的视角。
4 commentaires
亚当Danz”class=
亚当Danz 勒2021年9月20日
我不知道怎么告诉你…
这个Matlab技术支持回答金宝app 表示,“ 有时不准确潜入你可能得到的结果。这是由于这样的事实,系统可能会返回错误信息。如果你开始注意到这一点,你可以补偿通过更新视频驱动程序或切换显示器的分辨率。
这个线程 也可能是有帮助的。

Connectez-vous倒评论者。


版本

R2020a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的