Разное

Drawline java: Java Applet | Draw a line using drawLine() method

Рисования фигур с помощью Graphics в Java

Ниже перечислено несколько методов класса Graphics, которые используются для рисования фигур:

  • drawLine
  • drawRectangle
  • drawRoundRect
  • draw3DRect
  • drawPolygon
  • drawPolyline
  • drawOval
  • drawArc

Для них существуют соответствующие fill-методы заполнения фигур, которые были предусмотрены в классе Graphics начиная с JDK 1.0. В Java 2D API используется совершенно другая, объектно-ориентированная модель, где вместо методов применяются перечисленные ниже классы:

  • Line2D
  • Rectangle2D
  • RoundRectangle2D
  • Ellipse2D
  • Arc2D
  • QuadCurve2D
  • CubicCurve2D
  • GeneralPath

Данные классы реализуют интерфейс Shape.

Кроме того, предусмотрен класс точки Point2D, который описывает точку с координатами х и у. Точки полезны для определения фигур, но сами по себе фигурами не являются.

Для того чтобы нарисовать фигуру, нужно создать экземпляр класса, который реализует интерфейс Shape, а затем вызвать метод draw для класса Graphics2D.

Классы Line2D, Rectangle2D, RoundRectangle2D, Ellipse2D и Arc2D соответствуют методам drawLine(), drawRectangle(), drawRoundRect(), drawOval() и drawArc(). Для понятия «трехмерный треугольник»(3D rectangle) не предусмотрено соответствующего метода draw3DRect(). Однако в Java 2D API поддерживаются два дополнительных класса для рисования кривых второго и третьего порядков.

Для рисования многоугольников не предусмотрено отдельного класса (вроде Polygon2D), а предлагается класс GeneralPath, который описывает контуры, состоящие из линий и кривых второго и третьего порядков. Класс GeneralPath можно использовать для описания многоугольника.

Перечисленные ниже классы наследуют общий класс RectangularShape:

  • Rectangle2D
  • RoundRectangle2D
  • Ellipse2D
  • Arc2D

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

Каждый из классов, название которого заканчивается суффиксом 2D, имеет два подкласса, отличающейся способом указания координат(они задаются в виде чисел типа

float и double). Например, Arc2D.Float и Arc2D.Double.

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

Однако, в языке Java обработка чисел float выполняется очень громоздкими и неуклюжими способами. Поэтому большинство методов  графических классов используют параметры типа double и возвращают значение типа double.

Canvas DrawLine не гладкая — ошибки и другие проблемы

Soumya_Gautam

#1

Уважаемое сообщество,

Когда я пытаюсь нарисовать быстрые каракули с помощью блока DrawLine холста, кривые каракулей не получаются плавными. Расстояние между PrevX/Y и CurrentX/Y очень велико (десятки миллиметров), поэтому кривые выглядят как многоугольники, а не как гладкие кривые. Я не уверен, почему расстояние между двумя последовательными точками такое большое. Я также попытался добавить DrawCircle вместе с DrawLine в блок Canvas Dragged. Это сгладило края линий, но в точках поворота они не искривлены, а имеют резкие угловые повороты.

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

Заранее большое спасибо.

Сумья

dora_paz

9 января 2021 г., 20:22

#2

Для создания более гладкой линии попробуйте следующий код

1 Нравится

SteveJG

#3

https://groups. google.com/g/mitappinventortest/c/zu5E9OvQKs4/m/Hp2l-KZHDQAJ может помочь. и https://groups.google.com/g/mitappinventortest/c/u3g4NuHjKb8/m/1gljCmrvHQAJ

Soumya_Gautam

#4

Спасибо dora_paz, я попробовал эту же последовательность. но бесполезно. Линия по-прежнему не гладкая на кривых.

dora_paz

#5

С приведенным выше кодом это выглядит на моем телефоне из приложения, которое я сделал

Patryk_F

#6

Рисовать нужно точками, а не линиями

Soumya_Gautam

#7

Привет, Патрик, я тебя не понял. Способ рисования кривой — использование линии рисования. Точки разбросаны и не соединяются в одну кривую. Пожалуйста, поделитесь примером кода блока, если можете. Спасибо

Soumya_Gautam

#8

Дорогая dora_paz, я не знаю, как быстро ты рисуешь. Пожалуйста, посмотрите на мои каракули. Вышеуказанный медленнее и намного более плавный по сравнению с нижним. Я нарисовал нижнюю кривую быстрее, и кривая исказилась. Чем меньше ширина линии, тем уродливее это выглядит.

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

Сумья_Гаутам

#9

Патрик_Ф

#10

По очкам выглядит не очень. Я не думаю, что вы можете помочь. Canva слишком медленная, при быстрых движениях не успеет прочитать все промежуточные точки и тогда рисует прямые линии.

Сумья_Гаутам

, 20:54

#11

Да Патрик. Я понимаю этот момент. Но мои точки появляются слишком далеко. Любой способ убедиться, что холст выбирает более близкие точки для рисования линии. Спасибо.

Патрик_Ф

#12

Он не будет выбирать более близкие точки, потому что не может «видеть» их при быстрых движениях. Но нужны ли вам такие быстрые движения? При обычном рисовании все нормально. Быстрые движения чешутся, а когда морщишь, форма наверное не важна 😉

ТИМАИ2

№13

Кто-нибудь упомянул настройку адаптивного размера? Видимо это может помочь. ..

Patryk_F

№14

Отзывчивый — это значение по умолчанию в App Inventor. При быстрых движениях, как ответных, так и фиксированных, он создает прямые линии. Прямые линии выглядят зубчатыми только в фиксированном режиме.

ТИМАИ2

№15

Это не значит, что разработчик не изменит его на Fixed, а потом получит неожиданные результаты…

Soumya_Gautam

№16

Размер настроен на адаптивный. Я не изменил его.

HIFI_APPS

# 17

как сказала @dora_paz

сделайте это, а также попробуйте увеличить ширину, это будет гладко

HIFI_APPS

# 18

извините, это может не работать с тем, что я опубликовал, но прочитал

Помощь с рисованием Проблема с шириной линии

Soumya_Gautam

# 19

Привет, HIFI_APPS, я тоже просмотрел этот пост.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *