Как нарисовать эллипс в c
Перейти к содержимому

Как нарисовать эллипс в c

  • автор:

Нарисовать Эллипс и параллелепипед

Как нарисовать параллелепипед в Java?
Нужно нарисовать параллелепипед в Java: import java.awt.Color; import java.awt.Graphics; .

Нарисовать параллелепипед с помощью звездочек
Подскажите как нарисовать параллелепипед с помощью звездочек и вывести его в консоль. Только.

Нарисовать куб или параллелепипед в PictureBox
подскажите,как нарисовать куб или параллелепипед в pictureBox?

Графика: Нарисовать прямоугольный параллелепипед в нижнем правом углу с верхней площадкой.
Помогите пожалуйста сделать задание в free pascal очень прошу Вот само задание 1.установить.

99 / 99 / 14
Регистрация: 14.06.2010
Сообщений: 284

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

4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562

ЦитатаСообщение от dxdy Посмотреть сообщение

а эллипс нужно переходить к полярным системам координат.
программист С++
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014

taras atavin, от твоих умений выражать одни переменные через другие — легче не стало. Автор спрашивает как нарисовать?

4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
По точкам вестимо.

Эксперт С++

6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1

Лучший ответ

Сообщение было отмечено Памирыч как решение

Решение

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
#include #define MoveTo(hDC,x,y); MoveToEx(hDC,x,y,0); int main() { HDC hDC = GetDC( GetConsoleWindow( ) ); Ellipse( hDC, 200, 50, 300, 100 ); HPEN Pen = CreatePen( PS_SOLID, 2, RGB( 255, 0, 0 ) ); SelectObject( hDC, Pen ); MoveTo( hDC, 20, 200 ); LineTo( hDC, 120, 200 ); LineTo( hDC, 140, 175 ); LineTo( hDC, 40, 175 ); LineTo( hDC, 20, 200 ); LineTo( hDC, 20, 150 ); LineTo( hDC, 120, 150 ); LineTo( hDC, 140, 125 ); LineTo( hDC, 40, 125 ); LineTo( hDC, 20, 150 ); MoveTo( hDC, 40, 125 ); LineTo( hDC, 40, 175 ); MoveTo( hDC, 120, 200 ); LineTo( hDC, 120, 150 ); MoveTo( hDC, 140, 175 ); LineTo( hDC, 140, 125 ); system("pause"); }

Как нарисовать эллипс в c

Шаг 68.
Microsoft Visual C++ 2010. Начала.
Программирование. Графика. Графические примитивы. Эллипс и окружность

На этом шаге мы рассмотрим рисование указанных фигур .

Метод DrawEllipse чертит эллипс внутри прямоугольной области (рисунок 1).

Рис.1. Метод DrawEllipse рисует эллипс

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

Инструкция вызова метода DrawEllipse в общем виде выглядит так:

DrawEllipse(aPen, x, y, w, h);

Параметр aPen , в качестве которого можно использовать один из стандартных карандашей или карандаш, созданный программистом, определяет вид (цвет, толщину, стиль) границы эллипса. Параметры x, y, w и h задают координаты левого верхнего угла и размер прямоугольника, внутри которого метод рисует эллипс.

В инструкции вызова метода DrawEllipse вместо параметров x, y, w и h можно указать структуру типа Rectangle :

DrawEllipse(aPen, aRect);

Поля X и Y структуры aRect задают координаты левого верхнего угла области, внутри которой метод рисует эллипс, а поля Width и Height — размер.

Метод FillEllipse рисует закрашенный эллипс. В инструкции вызова метода следует указать кисть (стандартную или созданную программистом), координаты и размер прямоугольника, внутри которого надо нарисовать эллипс:

FillEllipse(aBrush, x, y, w, h);

Кисть определяет цвет и способ закраски внутренней области эллипса.

Вместо параметров x, y, w и h можно указать структуру типа Rectangle:

FillEllipse(aBrush, aRect);

Проиллюстрируем использование перечисленных методов следующим примером. В данном приложении изображается эллипс и закрашенная окружность. Вот текст приложения:

// конструктор Form1(void) < InitializeComponent(); // //TODO: добавьте код конструктора // this->Paint += gcnew System::Windows::Forms::PaintEventHandler(this, &Form1::drawCircle); > . . . . . void drawCircle(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) < Rectangle aRect; // положение и размер прямоугольника //прямоугольник размером 60х30, // левый верхний угол которого в точке (10, 10) aRect = Rectangle(10,10,60,30); // положение и размер // вывод эллипса внутри прямоугольника e->Graphics->DrawEllipse(Pens::Black, aRect); // Желтый круг размером 50х50, // левый верхний угол которого в точке (100, 10) // вывод круга внутри квадрата e->Graphics->FillEllipse(Brushes::Gold, 100,10,50,50); >

Архив проекта можно взять здесь.

Результат работы приложения изображен на рисунке 2.

Рис.2. Результат работы приложения

На следующем шаге мы рассмотрим построение дуги .

Как нарисовать эллипс по координатам на Image?

Есть класс который позволяет нарисовать эллипс по координатам x, y на канвасе. Как можно нарисовать такой же эллипс по координатам, только не на канвасе а на Image?

class draw < public static void circle(double x, double y, int width, int height, Canvas cv) < Ellipse circle = new Ellipse() < Width = width, Height = height, Stroke = Brushes.Red, StrokeThickness = 6 >; cv.Children.Add(circle); circle.SetValue(Canvas.LeftProperty, (double)x); circle.SetValue(Canvas.TopProperty, (double)y); > > draw.circle(x, y, 10, 10, cavRoot); 

Отслеживать
20.1k 6 6 золотых знаков 37 37 серебряных знаков 81 81 бронзовый знак
задан 15 апр 2020 в 15:20
317 2 2 серебряных знака 17 17 бронзовых знаков

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Как можно нарисовать такой же эллипс по координатам, только не на канвасе а на Image?

Одно другому не противоречит — можно разместить на Canvas Image, а поверх него нарисовать эллипс. Но механизм для рисования на изображении в WPF тоже существует, это DrawingVisual и RenderTargetBitmap:

using System; using System.Collections.Generic; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using System.Windows.Media.Imaging; namespace WpfTest < public partial class MainWindow : Window < public void circle(double x, double y, int width, int height, Image img) < Rect rect = new Rect(0, 0, img.ActualWidth, img.ActualHeight); DrawingVisual visual = new DrawingVisual(); if (rect.Width == 0 || rect.Height == 0) < rect.Width = img.Width; rect.Height = img.Height; >using (DrawingContext dc = visual.RenderOpen()) < dc.DrawImage(img.Source,rect); dc.DrawEllipse(null, new Pen(Brushes.Red, 6), new Point(x+width/2, y+height/2), width/2, height/2); >RenderTargetBitmap rtb = new RenderTargetBitmap( (int)rect.Width, (int)rect.Height, 96, 96, PixelFormats.Default); rtb.Render(visual); img.Source = rtb; > public MainWindow() < InitializeComponent(); img.Source = new BitmapImage(new Uri(@"C:\Test\Images\test.jpg")); >private void Button_Click(object sender, RoutedEventArgs e) < circle(10, 10, 50, 50, img); >> > 

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

public void circle(double x, double y, int width, int height, Image img) < double k = img.ActualWidth / img.Source.Width; Rect rect = new Rect(0, 0, img.Source.Width, img.Source.Height); DrawingVisual visual = new DrawingVisual(); if (rect.Width == 0 || rect.Height == 0) < rect.Width = img.Width; rect.Height = img.Height; >if (k == 0) < k = img.Width / img.Source.Width; >//пересчитаем координаты с учетом масштабного коэффициента x = x / k; y = y / k; width = (int)Math.Round((double)width / k); height = (int)Math.Round((double)height / k); using (DrawingContext dc = visual.RenderOpen()) < dc.DrawImage(img.Source,rect); dc.DrawEllipse(null, new Pen(Brushes.Red, 6/k), new Point(x+width/2, y+height/2), width/2, height/2); >RenderTargetBitmap rtb = new RenderTargetBitmap( (int)rect.Width, (int)rect.Height, 96, 96, PixelFormats.Default); rtb.Render(visual); img.Source = rtb; > 

Но предпочтительнее было бы использовать способ с добавлением Image в Canvas и рисованием фигуры на Canvas поверх него. При таком способе полностью задействована векторная графика и потери качества не будет независимо от масштаба. Преобразовать итоговый результат в растровое изображение вы все равно сможете, используя RenderTargetBitmap уже на Canvas.

Нарисовать эллипс

класс эллипс
ПОМОГИТЕ ПОЖАЛУЙСТА, начала изучать с++ столкнулась с такой вот задачей. Определить класс.

Написать класс, описывающий эллипс
Здравствуйте.. необходимо написать программу. столкнулся с трудностями.. помогите кто может.

Дружественные классы эллипс и круг
Здраствуйте, увадаемые форумчане помогите пожалуйста Задача. 1. Описать независимые классы и.

387 / 214 / 102
Регистрация: 09.04.2012
Сообщений: 635

Лучший ответ

Сообщение было отмечено DanManOP как решение

Решение

Добавлены функции:
— void DrawCoordinateSystem(HDC hdc, HWND hwnd)
рисует координатную систему с центром в точке (center_x,center_y)

— void DrawEllipse(HDC hdc, HWND hwnd)
рисует эллипс

Масштаб единицы координатной системы задается при рисовании эллипса переменными mastabx, mastaby.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
#include #include //Два файла с определениями, макросами #include //и прототипами функций Windows #include //и прототипами функций Windows #include #pragma comment (lib, "user32.lib") #pragma comment (lib, "kernel32.lib") #pragma comment (lib, "gdi32.lib") //глобальные переменные для рисования окна HINSTANCE hInstance; HINSTANCE hPrevInst; LPSTR lpszArgs; int nWinMode; /*Прототип используемой в программе оконной функции */ LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM, LPARAM); /*Произвольный класс*/ int center_x = 200; int center_y = 200; class exemple { public: /*Главная функция приложения WinMain*/ int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpszArgs, int nWinMode) { char szWinName[ ]="MyWindow"; //Произвольное имя класса главного окна char szTitle[ ]="Программа"; //Произвольный заголовок окна MSG msg; //Структура msg типа MSG для получения сообщений Windows WNDCLASS wc; //Структура wc типа WNDCLASS для задания //характеристик окна /*Заполнение структуры wc типа WNDCLASS для описания класса главного окна*/ ZeroMemory(&wc,sizeof(wc)); //Обнуление всех членов структуры wc wc.hInstance= hInstance; // Дескриптор приложения wc.lpszClassName=szWinName; // Имя класса окна wc.lpfnWndProc=WindowFunc; // Определение оконной функции wc.style=0; // Стиль по умолчанию wc.hIcon=LoadIcon(NULL,IDI_APPLICATION); //Стандартная пиктограмма wc.hCursor=LoadCursor(NULL,IDC_ARROW); //Стандартный курсор мыши wc.hbrBackground=GetStockBrush(WHITE_BRUSH); // Белый фон окна wc.lpszMenuName=NULL; // Без меню wc.cbClsExtra=0; // Без дополнительной информации wc.cbWndExtra=0; // Без дополнительной информации /*Регистрация класса главного окна*/ if(!RegisterClass (&wc)) //Если класс окна не регистрируется { // выводим сообщение и заканчиваем выполнение программы MessageBox (NULL,"Окно нерегестрируется","Ошибка",MB_OK); return 1;} // возвращаем код ошибки /*Создание главного окна и отображение его на мониторе*/ HWND hwnd = CreateWindow ( //Вызов функции API для создания ок-на szWinName, // имя класса главного окна szTitle, // заголовок окна WS_OVERLAPPEDWINDOW, // Стиль окна 100, // x-координата левого угла окна 100, // y-координата левого угла окна 500, // Ширина окна 500, // Высота окна HWND_DESKTOP, // Без родительского окна NULL, // Без меню hInstance, // Дескриптор приложения NULL); // Без дополнительных аргументов ShowWindow (hwnd, SW_SHOWNORMAL); // Вызов функции API // для отображения окна /*Организация цикла обнаружения сообщений*/ while(GetMessage(&msg,NULL,0,0)) // Если есть сообщение, передать его // нашему приложению DispatchMessage(&msg); //и вызвать оконную функцию WindowFunc return 0; //После выхода из цикла вернуться в Windows } //Конец функции WinMain }; void DrawCoordinateSystem(HDC hdc, HWND hwnd) { int i,j; for(i=center_x; i center_x +10; i++) SetPixel(hdc, i, center_y, RGB(255,0,0)); for(i=center_y; i> center_y -10; i--) SetPixel(hdc, center_x, i, RGB(255,0,0)); } // 2 2 // x y // -- + -- = 1 // 2 2 // a b void DrawEllipse(HDC hdc, HWND hwnd) { int i,j; float x, y; int mastabx = 20; int mastaby = 20; float a = 2.0; float b = 3.0; for(x = 0.0; x 3.0; x+=0.05) { y = sqrt( ( 1.0 - ((x*x)/(a*a)) ) * b * b ); SetPixel(hdc, center_x + mastabx * x, center_y + mastaby * y, RGB(0,255,0)); SetPixel(hdc, center_x + mastabx * x, center_y - mastaby * y, RGB(0,255,0)); SetPixel(hdc, center_x - mastabx * x, center_y + mastaby * y, RGB(0,255,0)); SetPixel(hdc, center_x - mastabx * x, center_y - mastaby * y, RGB(0,255,0)); } } /*Оконная функция WindowFunc главного окна, вызываемая Windows и получающая в качестве параметра сообщение из очереди сообщений данного приложения */ LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { // выбор по значению сообщения (message) case WM_DESTROY: //При завершении приложения пользователем PostQuitMessage (0); //вызвать функцию API завершения приложения break; case WM_PAINT: { HDC hdc = GetDC(hwnd); DrawCoordinateSystem(hdc, hwnd); DrawEllipse(hdc, hwnd); ReleaseDC(hwnd, hdc); } break; default: // Все сообщения, не обрабатываемые данной функцией, // направляются на обработку по умолчанию return DefWindowProc (hwnd,message,wParam,lParam); } //Конец оператора switch return 0; } int main(void) { class exemple val; val.WinMain( hInstance, hPrevInst, lpszArgs, nWinMode); }

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

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