Попытка нарисовать цилиндр на Java с использованием линий и овалов

#java #swing #user-interface #graphics #jpanel

#java #swing #пользовательский интерфейс #графика #jpanel

Вопрос:

Я пытаюсь нарисовать цилиндр, используя графику Java и пользовательский ввод для радиуса и высоты. Я схожу с ума, пытаясь выровнять свои точки x и y правильно. Я знаю, что это неправильно, но вот что у меня есть для моих линий и овалов, чтобы дать вам представление о том, что я имею в виду… Я новичок в этом, так что не будьте слишком строги ко мне!

          g.drawOval(50,  50, radius, height);
         g.drawLine(50, 94, 50, 287   height);
         g.drawLine(50   radius, 94, 50   radius, 287   height);
         g.drawOval(50, 331, radius, height);
  

Комментарии:

1. Что вы имеете getting x and y points to line up right в виду, например, какие точки? Можете ли вы четко объяснить, каков ваш ожидаемый результат и что вы получили?

2. То, что я делаю, это ввод пользователем радиуса и высоты для двух овалов, выстроенных вертикально, рисуя 2 вертикальные линии, по одной с каждой стороны от двух овалов, чтобы создать чертеж цилиндра. Используя строки кода, которые я привел выше, если я введу 200 для радиуса и 100 для высоты, он нарисует идеальный цилиндр. Однако, если я введу 100 для радиуса и 50 для высоты, мои 2 вертикальные линии будут недостаточно длинными, чтобы достичь сторон овалов. Извините, это сложно объяснить.

Ответ №1:

Мне удалось провести рефакторинг вашего кода, чтобы получить то, что вы хотите, вот как это выглядит.

     g.drawOval(50,  94, width, height);
    g.drawOval(50, 287, width, height);

    g.drawLine(50, 94 height/2, 50, 287 height/2);
    g.drawLine(50 width, 94 height/2, 50   width, 287   height/2);
  

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

Напомним, что координаты, которые вы задаете функции drawOval, не являются координатами центра этой овальной формы. Эти координаты указывают на верхнюю левую часть прямоугольника, который инкапсулирует ваш овал. Принимая это во внимание и выполняя вычисления, вот что я придумал.

Комментарии:

1. спасибо, я знал, что мне придется разделить высоту пополам, но по какой-то причине у меня не получалось, поэтому я начал все сначала, это было проще, чем я это делал!