Processing 用实际测量值处理图形

Processing 用实际测量值处理图形,processing,Processing,我想创建一个草图,如图所示 是否可以为特定的屏幕大小和分辨率创建A4大小的草图。如果是,我如何计算该值。因为正如您所知道的,处理使用size()方法,并且size的值是像素,而不是cm或mm 因此,我想画8厘米的线,每当用户点击线处理上的某个点时,就会以厘米为单位显示到中心点(红点)的距离。我可以用像素来做这些事情,但我不知道如何将这些值转换成厘米或毫米 此代码似乎有效(返回dpi): 导入java.awt.Toolkit; int resolution=Toolkit.getDefaultT

我想创建一个草图,如图所示

是否可以为特定的屏幕大小和分辨率创建A4大小的草图。如果是,我如何计算该值。因为正如您所知道的,处理使用size()方法,并且size的值是像素,而不是cm或mm

因此,我想画8厘米的线,每当用户点击线处理上的某个点时,就会以厘米为单位显示到中心点(红点)的距离。我可以用像素来做这些事情,但我不知道如何将这些值转换成厘米或毫米

此代码似乎有效(返回dpi):

导入java.awt.Toolkit;
int resolution=Toolkit.getDefaultToolkit().getScreenResolution();
系统输出打印LN(分辨率);
然而,这表明它是不可靠的。如果只想在单个监视器上运行,则可以手动计算:

processing width = horizontal resolution(#pixels) / screen width(cm) * page width(cm)
processing height = vertical resolution(#pixels) / screen height(cm) * page height(cm)
编辑:这里有一个函数可以将以厘米为单位的距离转换为#像素:

int-cmToPixels(浮点厘米){
//这是一个基于屏幕尺寸的常数
//我的显示器是1366x768
int水平屏幕分辨率=1366;
//这是屏幕的实际宽度,单位为厘米
int屏幕宽度=32;
//注:由于像素/厘米在垂直和水平方向上应相同,
//您可以对上述两个常量进行垂直等效。
返回cm*水平屏幕分辨率/屏幕宽度;
}

其思想是将像素总数除以它们所占的距离,得到每厘米像素数。然后,你乘以你想要的线的厘米数,它给你画线的像素

亲爱的凯文;非常感谢你的回答。但是,我不知道如何在草图中反映此测量项目。例如,我如何在8厘米内画一条线,或者如何在厘米内显示鼠标和红点之间的距离?我用一个示例函数编辑了我的答案。我希望这有帮助!亲爱的凯文;非常感谢你的帮助。我使用了这个方法,它写的很好。但是,有一点我不明白。当我使用经度(高度)时,这种方法也有效,因为我看到你是根据轴来计算的。你能给我解释一下吗?例如,我试着用你写的方法制造5厘米的垂直间隙。它有效!。但是,在您的实现中,您只计算监视器的水平值。屏幕中的像素应该是一个正方形网格,这样,如果N个像素在垂直方向上适合于L厘米,那么相同的数量应该在水平方向上适合于相同的距离。另一种说法是,每个像素的高度与宽度相同(以厘米为单位)。将屏幕宽度除以水平方向上的像素数,得到单个像素的宽度(如果100个像素覆盖10厘米,则每个像素为10/100=0.1厘米)。由于宽度与高度相同,因此可以使用相同的转换。