В этой главе мы увидим, как нарисовать круг в PDF-документе с помощью библиотеки iText.
Рисование круга на PDF
Вы можете создать пустой PDF-документ, создав экземпляр класса Document . При создании экземпляра этого класса вам необходимо передать объект PdfDocument в качестве параметра его конструктору.
Ниже приведены шаги, чтобы нарисовать круг в документе PDF.
Шаг 1: Создание объекта PdfWriter
Создайте экземпляр класса PdfWriter, передав строковое значение (представляющее путь, по которому вам нужно создать PDF), в его конструктор, как показано ниже.
Когда объект этого типа передается в PdfDocument (класс), каждый элемент, добавленный в этот документ, будет записан в указанный файл.
Шаг 2: Создание объекта PdfDocument
Создайте экземпляр класса PdfDocument, передав объект PdfWriter его конструктору, как показано ниже.
// Creating a PdfDocument PdfDocument pdfDoc = new PdfDocument(writer);
После создания объекта PdfDocument вы можете добавить различные элементы, такие как страница, шрифт, вложение файла и обработчик события, используя соответствующие методы, предоставляемые его классом.
Как нарисовать круг в скретч (Scratch)
Шаг 3: Создание объекта Document
Класс Document пакета com.itextpdf.layout является корневым элементом при создании самодостаточного PDF. Один из конструкторов этого класса принимает объект класса PdfDocument.
Создайте экземпляр класса Document , передав объект класса PdfDocument, созданный на предыдущих шагах, как показано ниже.
// Creating a Document Document document = new Document(pdfDoc);
Шаг 4: Создание объекта PdfCanvas
// Creating a new page PdfPage pdfPage = pdfDoc.addNewPage(); // Creating a PdfCanvas object PdfCanvas canvas = new PdfCanvas(pdfPage);
Шаг 5 Установка цвета
Установите цвет круга с помощью метода setColor () класса Canvas , как показано ниже.
// Setting color to the circle Color color = Color.GREEN; canvas.setColor(color, true);
Шаг 6: Рисуем круг
Нарисуйте круг, вызвав метод circle () в Canvas , как показано ниже.
// creating a circle canvas.circle(300, 400, 200);
Шаг 7: Закрытие документа
Закройте документ с помощью метода close () класса Document , как показано ниже.
// Closing the document document.close();
пример
Сохраните этот код в файле с именем DrawingCircle.java .
Скомпилируйте и выполните сохраненный файл Java из командной строки, используя следующие команды.
javac DrawingCircle.java java DrawingCircle
После выполнения вышеуказанная программа создает документ PDF, отображающий следующее сообщение.
Object drawn on pdf successfully
Если вы проверите указанный путь, вы можете найти созданный PDF-документ, как показано ниже.
Источник: coderlessons.com
Как нарисовать круг на с++?
Здравствуйте. Нужно нарисовать круг в простом консольном проекте под ubuntu. Использую gcc. Погуглил, для решения такой задачи везде используют то windows.h то graphics.h, а вот gcc на это ругается. Подскажите пожалуйста как возможно решить эту проблему.
Как нарисовать круг нужного диаметра в ворде
- Вопрос задан более трёх лет назад
- 17730 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 6
Вот — простой способ:
#include #include // compile: // gcc -Wall -Wextra -Werror -lglut -lGL -lm -std=gnu99 -D_GNU_SOURCE opengl.c -o openglcircle #define _U_ __attribute__((__unused__)) // exit by ctrl+q or escape void keyPressed(unsigned char key, _U_ int x, _U_ int y) < int mod = glutGetModifiers(); // window = glutGetWindow() if(mod == GLUT_ACTIVE_CTRL key == ‘q’) exit(0); else if(key == 27) exit(0); >void DrawCircle(float cx, float cy, float r, int num_segments) < float theta = 2. * M_PI / (float)num_segments; float c, s, t, x = r, y = 0.; sincosf(theta, c); glBegin(GL_LINE_LOOP); for(int ii = 0; ii < num_segments; ii++)< glVertex2f(x + cx, y + cy); t = x; x = c * x — s * y; y = s * t + c * y; >glEnd(); > void display() < glClear(GL_COLOR_BUFFER_BIT); DrawCircle(0.,0.,0.5,100); glFlush(); >int main(int argc, char** argv)
А, извиняюсь, про С++ не заметил. Ну да ладно, все равно я С++ не знаю и знать не хочу!
P.S. А вот — чистая консолька:
#include #include #include char *drawCircle(int R, int geom) < if(R >200 || R < 1) return NULL; int S, i, Y = 2 * R + 2; if(geom) S = Y * (R + 1); else S = Y * (Y — 1); char *buf = malloc(S+1); if(!buf) return NULL; memset(buf, ‘ ‘, S); buf[S] = 0; for(i = Y-1; i < S; i+=Y) buf[i] = ‘n’; inline void DrawPixel(int x, int y)< if(geom)< if(y%2==0) buf[Y * y/2 + x] = ‘*’; >else < buf[Y * y + x] = ‘*’; >> // Bresenham’s circle algorithm int x = R; int y = 0; int radiusError = 1-x; while(x >= y)< DrawPixel(x + R, y + R); DrawPixel(y + R, x + R); DrawPixel(-x + R, y + R); DrawPixel(-y + R, x + R); DrawPixel(-x + R, -y + R); DrawPixel(-y + R, -x + R); DrawPixel(x + R, -y + R); DrawPixel(y + R, -x + R); y++; if (radiusError < 0)< radiusError += 2 * y + 1; >else < x—; radiusError += 2 * (y — x) + 1; >> return buf; > int main(int argc, char **argv) < int i, R; char *buf; for(i = 1; i < argc; i++)< if(!(buf = drawCircle(R = atoi(argv[i]), 1)))< printf(«Wrong parameter %sn», argv[i]); continue; >printf(«nCircle with R = %d:n%sn», R, buf); free(buf); buf = NULL; > return 0; >
Алгоритм Брезенхэма, второй аргумент функции drawCircle задает поправку на геометрию терминала: если у вас вдруг в терминале высота буквы равна ширине, то пишите 0, если же высота в 2 раза больше ширины, пишите 1.
Источник: qna.habr.com
Рисование кругов и правильных многоугольников
Для рисования потребуется приложения AutoHotkey и специальный скрипт для него. Приложение предназначено для выполения макросов и привязки их к сочетаниям клавиш.
Автором подхода и скрипта является Falcon. Я переработал скрипт, чтобы его можно было применять без масштабирования и переноса полученного круга. Что позволило рисовать дороги и избавило от проблемы, когда перестало работать масштабирование с сохранением пропорций.
Предварительные шаги:
1) Скачать и установить приложения AutoHotkey
Не могу гарантировать долговременное хранение скрипта в общем доступе, поэтому прикладываю его код здесь. Достаточно сохранить этот код в текстовом файле с расширением .ahk
Alt+R рисование круга на основе трех точек
Alt+P Правильный многоугольник с заданным количеством вершин
Alt+ Left mouse button click — двойное нажатие для простого удаления вершин
GetSegmentLength(x1, y1, x2, y2)
return Sqrt((x1 — x2)**2 + (y1 — y2)**2)
GetRadius(a, b, c)
s := Sqrt(p*(p-a)*(p-b)*(p-c))
GetCenter(x1, y1, x2, y2, x3, y3, ByRef x0, ByRef y0)
A1 := x2 — x1
B1 := y2 — y1
C1 := (x2-x1)*(x2+x1)/2 + (y2-y1)*(y2+y1)/2
A2 := x3 — x1
B2 := y3 — y1
C2 := (x3-x1)*(x3+x1)/2 + (y3-y1)*(y3+y1)/2
x0 := (C1*B2 — C2*B1)/(A1*B2 — A2*B1)
y0 := (A1*C2 — A2*C1)/(A1*B2 — A2*B1)
DrawCircle(x, y, r, n)
pi = 3.1415926535898
beta0 := pi ; начальный угол (точнее угол последней точки)
beta := 2.*pi/n+beta0 ; угол в радианах
px := -1 * sin(beta)*r+x ; если поменять синус и косинус местами, будет рисовать в другую сторону
py := -1 * cos(beta)*r+y
click, %px%, %py%
beta0 := beta
;Рисование кругов на основе трёх точек
#IfWinActive Народная карта Яндекса
MouseGetPos, x1, y1
MsgBox Вторая точка
MouseGetPos, x2, y2
MsgBox Третья точка
MouseGetPos, x3, y3
InputBox, n, Количество вершин
as := GetSegmentLength(x1, y1, x2, y2)
bs := GetSegmentLength(x1, y1, x3, y3)
cs := GetSegmentLength(x3, y3, x2, y2)
r := GetRadius(as, bs, cs)
с := GetCenter(x1, y1, x2, y2, x3, y3, x0, y0)
DrawCircle(x0, y0, r, n)
;Рисование правильных многоугольников
#IfWinActive Народная карта Яндекса
InputBox, n, Количество вершин
DrawCircle(860, 540, r, n)
;Двойной клик для удаления точки
#IfWinActive Народная карта Яндекса
LAlt hotkey doesn’t exist in current keyboard layout», убедитесь, что включена английская раскладка
Источник: yandex.ru