рисование прямоугольника

Пишу программу, которая принимает координаты от пользователя и рисует на экране какие-то фигуры звездочками(*)

например, прямоугольник, то есть прямоугольник = 100,150,50,50 как x, y, ширина, высота. как мне это сделать??


person Community    schedule 20.12.2010    source источник
comment
нет только на экране со звездами   -  person    schedule 20.12.2010
comment
Можете ли вы перечислить все формы, которые вам нужно поддерживать?   -  person Matthew Cox    schedule 20.12.2010
comment
прямоугольник, треугольник, квадрат и пятиугольник. Я приму координаты от пользователя   -  person    schedule 20.12.2010
comment
вам потребуются разные атрибуты для разных форм, верно? ширины и высоты хватило бы только на прямоугольник...   -  person Eternal Noob    schedule 20.12.2010
comment
Хорошо, прежде чем мы углубимся в решение проблемы. Есть еще один, основанный на предоставленной вами информации. Какой механизм вы будете использовать, чтобы определить, с каким типом формы вы имеете дело? Если они передают только координаты, такие как (например, Point[]), то вас ждет кошмар с определением формы.   -  person Matthew Cox    schedule 20.12.2010
comment
но мне также нужны начальные точки x и y   -  person    schedule 20.12.2010
comment
я должен сделать это с помощью циклов, верно?   -  person    schedule 20.12.2010
comment
Есть ли другой способ сделать ??   -  person    schedule 20.12.2010
comment
Это пахнет домашней работой, поэтому, если это так, пожалуйста, отметьте это соответствующим образом. Вопросы для решения: Создайте механизм для определения типа формы, с которой вы работаете. Хорошее решение также решит проблему передачи атрибутов. Начните с базового класса формы, а затем рассмотрите возможность расширения за счет композиции или наследования, где это необходимо. После того, как вы сделали это для всех ваших форм. Тогда вы готовы к первоначальному вопросу о том, как отобразить их с помощью звездочек.   -  person Matthew Cox    schedule 20.12.2010
comment
Напишите программу, которая будет рисовать картинку на экране по заданным параметрам. Программа будет иметь 5 вариантов a. Будет принимать координаты для следующих типов фигур: i. Прямоугольник, т.е. прямоугольник = 100,200,50,50 как x,y,ширина,высота ii. Треугольник, т.е. треугольник = 100,200,50,50,60,60 как x,y,x1,y1,x2,y2 iii. Квадрат, т.е. Квадрат = 100 200, 50 как x, y, длина iv. Пятиугольник, т.е. пятиугольник = 100,200,50,50,60,60 как x,y,x1,y1,x2,y2,x3,y3,x4,y4 b. Выход   -  person    schedule 20.12.2010
comment
могут быть координаты точки, из которой тянут прямоугольник   -  person Aravind Yarram    schedule 21.12.2010
comment
Пожалуйста, не могли бы вы лучше описать свой вопрос, чтобы мы могли вам помочь.   -  person moinudin    schedule 21.12.2010
comment
Пожалуйста, не задавайте этот вопрос снова только потому, что вы недовольны полученными ответами. Вы можете отредактировать свой вопрос, чтобы уточнить его. Вы также можете предложить награду.   -  person    schedule 22.12.2010


Ответы (5)


Я думаю, что это руководство очень полезно для вас: http://download.oracle.com/javase/tutorial/2d/geometry/primitives.html

person AlexR    schedule 20.12.2010
comment
спасибо, Алекс, но я не буду использовать графический интерфейс, я просто буду рисовать фигуры с помощью циклов for. - person ; 20.12.2010

Что такое «рисунок со звездами»? Если это текстовый режим с моноширинным шрифтом, вам нужно будет печатать его горизонтальными линиями звезд, вычисляя правильную длину. Для прямоугольников это легко, для треугольников немного сложнее, пятиугольник — это просто комбинация прямоугольника и нескольких треугольников. См. алгоритм Брезенхэма для вдохновения.

Также обратите внимание, что разрешение в текстовом режиме довольно низкое; стандартное окно терминала имеет ширину всего 80 символов, и вы вряд ли сможете сделать его намного шире, чем, скажем, 200-300 символов, поэтому важно правильное округление.

person 9000    schedule 20.12.2010
comment
пятиугольник не очень сложно разбить на простые части: !четыре треугольника и прямоугольник. - person 9000; 20.12.2010

Если это только прямоугольники, то в вашем методе рисования должно работать следующее...

int xIncrement = (int)g.getFont().getStringBounds("*", null).getWidth();  
int yIncrement = (int)g.getFont().getStringBounds("*", null).getHeight(); 
for(int i = y; i < y + height; i += xIncrement)  
    for(int j = x; j < x + width; j += yIncrement)
        g.drawString("*", j, i);  

Для треугольников и других фигур это немного сложнее, но вы можете вычислить градиенты линий, разделяющих точки, и, следовательно, получить начальный x для каждой линии.

Как правило, старайтесь избегать «рисования звезд»...

person hauntsaninja    schedule 20.12.2010

Если вы не имеете в виду графический интерфейс, координата Y может быть количеством строк, которые вы должны «пропустить», а координата x напоминает количество пробелов, которые вы вводите в строке.

Таким образом, в основном, x = 2 и y = 3 означает, что вам нужно будет спуститься на 3 строки и переместиться на 2 пробела вправо.

person npinti    schedule 21.12.2010

Ниже приведено из javadoc

x - новая координата x для верхнего левого угла этого прямоугольника y - новая координата y для верхнего левого угла этого прямоугольника

person Aravind Yarram    schedule 21.12.2010