2015-10-03 4 views
-1

Итак, я хочу создать массив [64] [64] из 0 в java и создать здесь треугольник. Я имею в виду что-то вроде:Создайте треугольник из двух в двумерном массиве

0001000 
0010100 
0100010 
1111111 

Так что я создал точку класса:

public class Point { 
    public int x; 
    public int y; 

    Point(int x, int y) 
    { 
     this.x = x; 
     this.y = y; 
    } 
} 

И я создаю в основных новых точек объектов таким образом:

int amountOfPowers = 6; 
Point a = new Point((int) (Math.pow(2, amountOfPowers))/2, 0); 
    Point b = new Point((int) Math.pow(2, amountOfPowers), (int) (Math.pow(2, amountOfPowers) * Math.sqrt(3.0)/2)); 
    Point c = new Point(0, (int) (Math.pow(2, amountOfPowers) * Math.sqrt(3.0)/2)); 

Так это (0, 64) , B - (64, 64) и C - (32, 55). Кто-нибудь знает, как я могу писать все позиции в массиве от 0,64 до 64,64 как 1? (что-то вроде [0][64] = 1, [1][64] = 1, ..., [64][64] = 1). А также как я могу создавать линии из от (0,64) до (32, 55) и от (32, 55) до (64, 64). Кто-нибудь знает, как я могу это сделать?

@edit

Я пытался использовать его: https://en.wikipedia.org/wiki/Line_drawing_algorithm

Вот мой метод:

static void drawLine(Point from, Point to) { 
     // https://en.wikipedia.org/wiki/Line_drawing_algorithm 
     int dx = to.x - from.x; 
     int dy = to.y - from.y; 

     for (int x = from.x; x < to.x; x++) { 
      int y = from.y + dx * (x - from.x)/dy; 
      System.out.println("X: " + x + " Y: " + y); 
      canvas[x][y] = 1; 
     } 
    } 

Я написал это в основной:

drawLine(a, b); 
drawLine(b, c); 
drawLine(c, a); 

И вот мой результат:/Это что-то не так.

0000000000000000000000000000000000000000000000000000000100000000 
0000000000000000000000000000000000000000000000000000000100000000 
0000000000000000000000000000000000000000000000000000001000000000 
0000000000000000000000000000000000000000000000000000001000000000 
0000000000000000000000000000000000000000000000000000010000000000 
0000000000000000000000000000000000000000000000000000010000000000 
0000000000000000000000000000000000000000000000000000100000000000 
0000000000000000000000000000000000000000000000000001000000000000 
0000000000000000000000000000000000000000000000000001000000000000 
0000000000000000000000000000000000000000000000000010000000000000 
0000000000000000000000000000000000000000000000000010000000000000 
0000000000000000000000000000000000000000000000000100000000000000 
0000000000000000000000000000000000000000000000000100000000000000 
0000000000000000000000000000000000000000000000001000000000000000 
0000000000000000000000000000000000000000000000010000000000000000 
0000000000000000000000000000000000000000000000010000000000000000 
0000000000000000000000000000000000000000000000100000000000000000 
0000000000000000000000000000000000000000000000100000000000000000 
0000000000000000000000000000000000000000000001000000000000000000 
0000000000000000000000000000000000000000000010000000000000000000 
0000000000000000000000000000000000000000000010000000000000000000 
0000000000000000000000000000000000000000000100000000000000000000 
0000000000000000000000000000000000000000000100000000000000000000 
0000000000000000000000000000000000000000001000000000000000000000 
0000000000000000000000000000000000000000001000000000000000000000 
0000000000000000000000000000000000000000010000000000000000000000 
0000000000000000000000000000000000000000100000000000000000000000 
0000000000000000000000000000000000000000100000000000000000000000 
0000000000000000000000000000000000000001000000000000000000000000 
0000000000000000000000000000000000000001000000000000000000000000 
0000000000000000000000000000000000000010000000000000000000000000 
0000000000000000000000000000000000000100000000000000000000000000 
1000000000000000000000000000000000000000000000000000000000000000 
1000000000000000000000000000000000000000000000000000000000000000 
0100000000000000000000000000000000000000000000000000000000000000 
0100000000000000000000000000000000000000000000000000000000000000 
0010000000000000000000000000000000000000000000000000000000000000 
0010000000000000000000000000000000000000000000000000000000000000 
0001000000000000000000000000000000000000000000000000000000000000 
0000100000000000000000000000000000000000000000000000000000000000 
0000100000000000000000000000000000000000000000000000000000000000 
0000010000000000000000000000000000000000000000000000000000000000 
0000010000000000000000000000000000000000000000000000000000000000 
0000001000000000000000000000000000000000000000000000000000000000 
0000001000000000000000000000000000000000000000000000000000000000 
0000000100000000000000000000000000000000000000000000000000000000 
0000000010000000000000000000000000000000000000000000000000000000 
0000000010000000000000000000000000000000000000000000000000000000 
0000000001000000000000000000000000000000000000000000000000000000 
0000000001000000000000000000000000000000000000000000000000000000 
0000000000100000000000000000000000000000000000000000000000000000 
0000000000010000000000000000000000000000000000000000000000000000 
0000000000010000000000000000000000000000000000000000000000000000 
0000000000001000000000000000000000000000000000000000000000000000 
0000000000001000000000000000000000000000000000000000000000000000 
0000000000000100000000000000000000000000000000000000000000000000 
0000000000000100000000000000000000000000000000000000000000000000 
0000000000000010000000000000000000000000000000000000000000000000 
0000000000000001000000000000000000000000000000000000000000000000 
0000000000000001000000000000000000000000000000000000000000000000 
0000000000000000100000000000000000000000000000000000000000000000 
0000000000000000100000000000000000000000000000000000000000000000 
0000000000000000010000000000000000000000000000000000000000000000 
0000000000000000001000000000000000000000000000000000000000000000 

У кого-нибудь есть идея, как я могу решить свою проблему? :/

+0

Вы слышали о цикле 'for' в java? – LEQADA

+0

Да, я слышал. Но как ваш комментарий должен мне помочь? ...... –

+0

Мы здесь не для того, чтобы делать домашнее задание! –

ответ

0

Если вы будете думать о своих массивах в качестве экрана и о 1 в качестве темных пикселей и нулей в виде белых пикселей, чем у вас есть задача рисовать линию на экране. На самом деле именно эта задача активно выполняется на видеокарте.

Алгоритм выражается здесь https://en.wikipedia.org/wiki/Line_drawing_algorithm

NB: в алгоритме они используют INT в и из-за округление вопросы, которые вы могли бы быть будут иметь лучшие результаты, если вы будете менять COORDS и итерации, используя у вместо й.

+0

Я попытался использовать его, но он не работает:/Или у меня нет идеи, как его использовать. –

+1

Я нашел другой алгоритм: https://en.wikipedia.org/wiki/Bresenham's_line_algorithm Я завтра его проверю: P Теперь я иду спать, спасибо за всю помощь :) –

+0

Я думаю, что 2-й (Bresenham) будет работать ОК. Удачи! –

Смежные вопросы