在 canvas 上根据位置((x,y)坐标)用不同颜色绘制 SWT 点
Drawing SWT Point with different colors according to their positions ((x,y) coordinates) on canvas
我正在尝试用不同的颜色在 canvas 上画点。基本上,蓝色当前点,绿色当前点之前绘制的点和红色当前点之后绘制的点。请看代码
private void setElemColor(GC g, int pos) {
int currentPoint = messtisch.getPointPos(); //current point, number
if (pos > currentPoint) {
g.setForeground(cRed);
} else if (pos == currentPoint) {
g.setForeground(cBlue);
} else if (pos < currentPoint) {
g.setForeground(cGreen);
}
}
增加理解力。这很完美。但是我正在尝试使用 Point 代替 Int 来做同样的事情并且没有得到正确的逻辑。如
private void setPointColor(GC g, Point cpoint) {
if (cpoint.equals(currentPoint)) { // the current point itself
g.setForeground(cBlue);
} else if (!cpoint.equals(currentPoint)) {
if (cpoint.x > currentPoint.x || cpoint.y > currentPoint.y) {
g.setForeground(cRed);
} else {
g.setForeground(cGreen);
}
}
}
请帮我看看。
我是通过使用新的 ArrayList 并将点保存到已经是 currentPoint 来完成的。然后用绿色绘制它们作为旧点。这是我的代码示例。
private ArrayList<Point> oldpoints = new ArrayList<Point>();
private void setPointColor(GC g, Point cpoint) {
if (oldpoints.contains(cpoint)) {
g.setForeground(cGreen);
} else if (!oldpoints.contains(cpoint)) {
g.setForeground(cRed);
}
if (cpoint.equals(currentPoint)) {
g.setForeground(cBlue);
oldpoints.add(cpoint);
}
}
请建议其他方法,因为这个方法效率低且不合逻辑。提前致谢。
我认为您的解决方案是合理的,但请考虑使用集合而不是列表。例如,TreeSet
或 HashSet
将能够比迭代更快地检查大型集合中的现有条目(树的 O(log n) 和哈希桶的 O(1))在列表上(O(n) - 线性时间)。
private Set<Point> oldpoints = new HashSet<Point>();
我正在尝试用不同的颜色在 canvas 上画点。基本上,蓝色当前点,绿色当前点之前绘制的点和红色当前点之后绘制的点。请看代码
private void setElemColor(GC g, int pos) {
int currentPoint = messtisch.getPointPos(); //current point, number
if (pos > currentPoint) {
g.setForeground(cRed);
} else if (pos == currentPoint) {
g.setForeground(cBlue);
} else if (pos < currentPoint) {
g.setForeground(cGreen);
}
}
增加理解力。这很完美。但是我正在尝试使用 Point 代替 Int 来做同样的事情并且没有得到正确的逻辑。如
private void setPointColor(GC g, Point cpoint) {
if (cpoint.equals(currentPoint)) { // the current point itself
g.setForeground(cBlue);
} else if (!cpoint.equals(currentPoint)) {
if (cpoint.x > currentPoint.x || cpoint.y > currentPoint.y) {
g.setForeground(cRed);
} else {
g.setForeground(cGreen);
}
}
}
请帮我看看。
我是通过使用新的 ArrayList 并将点保存到已经是 currentPoint 来完成的。然后用绿色绘制它们作为旧点。这是我的代码示例。
private ArrayList<Point> oldpoints = new ArrayList<Point>();
private void setPointColor(GC g, Point cpoint) {
if (oldpoints.contains(cpoint)) {
g.setForeground(cGreen);
} else if (!oldpoints.contains(cpoint)) {
g.setForeground(cRed);
}
if (cpoint.equals(currentPoint)) {
g.setForeground(cBlue);
oldpoints.add(cpoint);
}
}
请建议其他方法,因为这个方法效率低且不合逻辑。提前致谢。
我认为您的解决方案是合理的,但请考虑使用集合而不是列表。例如,TreeSet
或 HashSet
将能够比迭代更快地检查大型集合中的现有条目(树的 O(log n) 和哈希桶的 O(1))在列表上(O(n) - 线性时间)。
private Set<Point> oldpoints = new HashSet<Point>();