java中缺失的鼠标数据补全
Filling in the data from the mouse that is missing in java
我有一个简单的绘图程序,我正在尝试将屏幕上的内容转换为二维数组。在 java swing 的 mouseDragged 方法中,您可以获得鼠标被拖动到的点,但它不会对位置进行足够多次采样以获取您绘制的所有点。
public void mouseDragged(MouseEvent me) {
p.lineTo(me.getX(), me.getY());
x=me.getX();
y=me.getY();
lines[me.getX()][me.getY()]=1;
repaint();
}
在此我有二维数组线,每个空像素处有一个 0,每个彩色像素处有一个 1。问题是,当我打印出数组时,我发现鼠标侦听器没有看到我在 canvas 上绘制的所有点。它跳过了一些要点。所以我的问题是如何连接这些出现在屏幕上而不是阵列上的缺失点。
例如程序会打印,
- {0,0,0,0,1,1,1,0,1,1,0,0,0}
- {0,0,0,0,0,0,0,0,0,0,0,1,1}
我想问的是,如果有一个好的算法来填充应该是 1 的零
我在 http://wphooper.com/java/tutorial/source/Graphics/html/simplermouseinteraction/Drawing.php
处有经过高度编辑的代码版本
下面是矩阵中 linear interpolation 的示例:
int x, y;
public void mousePressed(MouseEvent e) {
x = e.getX();
y = e.getY();
}
public void mouseDragged(MouseEvent e) {
int dx = e.getX()-x,
dy = e.getY()-y;
double a;
//the condition is for accuracy in vertical drags
if (Math.abs(dx) >= Math.abs(dy)) {
a = dy/((double) dx);
for (int i = 0; Math.abs(i) < Math.abs(dx); i += Math.signum(dx)) {
lines[x+i][(int) (y+i*a)] = 1;
}
} else {
a = dx/((double) dy);
for (int i = 0; Math.abs(i) < Math.abs(dy); i += Math.signum(dy)) {
lines[(int) (x+i*a)][y+i] = 1;
}
}
x = e.getX();
y = e.getY();
repaint();
}
我已经测试过了,它画了一条连续的实线。
我有一个简单的绘图程序,我正在尝试将屏幕上的内容转换为二维数组。在 java swing 的 mouseDragged 方法中,您可以获得鼠标被拖动到的点,但它不会对位置进行足够多次采样以获取您绘制的所有点。
public void mouseDragged(MouseEvent me) {
p.lineTo(me.getX(), me.getY());
x=me.getX();
y=me.getY();
lines[me.getX()][me.getY()]=1;
repaint();
}
在此我有二维数组线,每个空像素处有一个 0,每个彩色像素处有一个 1。问题是,当我打印出数组时,我发现鼠标侦听器没有看到我在 canvas 上绘制的所有点。它跳过了一些要点。所以我的问题是如何连接这些出现在屏幕上而不是阵列上的缺失点。
例如程序会打印,
- {0,0,0,0,1,1,1,0,1,1,0,0,0}
- {0,0,0,0,0,0,0,0,0,0,0,1,1}
我想问的是,如果有一个好的算法来填充应该是 1 的零
我在 http://wphooper.com/java/tutorial/source/Graphics/html/simplermouseinteraction/Drawing.php
处有经过高度编辑的代码版本下面是矩阵中 linear interpolation 的示例:
int x, y;
public void mousePressed(MouseEvent e) {
x = e.getX();
y = e.getY();
}
public void mouseDragged(MouseEvent e) {
int dx = e.getX()-x,
dy = e.getY()-y;
double a;
//the condition is for accuracy in vertical drags
if (Math.abs(dx) >= Math.abs(dy)) {
a = dy/((double) dx);
for (int i = 0; Math.abs(i) < Math.abs(dx); i += Math.signum(dx)) {
lines[x+i][(int) (y+i*a)] = 1;
}
} else {
a = dx/((double) dy);
for (int i = 0; Math.abs(i) < Math.abs(dy); i += Math.signum(dy)) {
lines[(int) (x+i*a)][y+i] = 1;
}
}
x = e.getX();
y = e.getY();
repaint();
}
我已经测试过了,它画了一条连续的实线。