Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
2 / 2 / 0
Регистрация: 21.01.2014
Сообщений: 57

DrawEllipse с переменными double и float

23.01.2018, 12:40. Показов 3806. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не могу понять почему функция рисования DrawEllipse не работает с типом double или float.

Выдает ошибку "The best overloaded method match for 'System.Drawing.Graphics.DrawEllipse(Sys tem.Drawing.Pen, int, int, int, int)' has some invalid arguments" и жалуется, что не может конвертировать double в int.

Судя по ошибке этот метод работает только с int или я чего то не понимаю?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        double D = 276.0;
        double d = 47.0;
        double scale = 1.2;
        double Ox = 10;
        double Oy = 10;
 
 //Draw disk to screen
 
        private void disk(double Ox, double Oy, double D, double d, double scale)
        {
            Graphics g = CreateGraphics(); 
            g.DrawEllipse(new Pen(Color.Black, 5), Ox, Oy, D * scale, D * scale);
            g.DrawEllipse(new Pen(Color.Black, 5), Ox + (D*scale - d*scale) / 2, Oy + (D*scale - d*scale) / 2, d*scale, d*scale);
            g.FillEllipse(new SolidBrush(Color.Black), Ox + (D*scale - d*scale) / 2, Oy + (D*scale - d*scale) / 2, d*scale, d*scale);
        }
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.01.2018, 12:40
Ответы с готовыми решениями:

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

Работа с переменными типа float и double
Доброго времени суток всем, даммеры и госпопрограммеры :D Пытался я на днях реализовать программу, которая считает кол-во чисел после...

Преобразовать 2 числа int в 1 число float(double) | double int1.int2
Всем привет. Изучая азы C++, столкнулся с такой проблемой. Есть два значения типа int, их необходимо преобразовать в одно значение типа...

7
 Аватар для Кузнец кода
169 / 188 / 35
Регистрация: 21.01.2018
Сообщений: 230
23.01.2018, 13:08
DrawEllipse принимает значения float посмотрите и замените double на float и будет вам счастье
1
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
23.01.2018, 13:09
Цитата Сообщение от egrozavr Посмотреть сообщение
этот метод работает только с int или я чего то не понимаю?
Метод работает с int:
C#
1
g.DrawEllipse(new Pen(Color.Black, 5), (int)Ox, (int)Oy, (int)(D * scale), (int)(D * scale));
и с float:
C#
1
g.DrawEllipse(new Pen(Color.Black, 5), (float)Ox, (float)Oy, (float)(D * scale), (float)(D * scale));
Можно вроде использовать вместе int и float:
C#
1
g.DrawEllipse(new Pen(Color.Black, 5), (int)Ox, (int)Oy, (float)(D * scale), (float)(D * scale));
C double не работает.
0
2 / 2 / 0
Регистрация: 21.01.2014
Сообщений: 57
23.01.2018, 13:26  [ТС]
Уже пробовал. Такая же ровно ошибка.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        float D = 276.0f;
        float d = 47.0f;
        float scale = 1.2f;
        float Ox = 10.0f;
        float Oy = 10.0f;
 
 //Draw disk to screen
 
        private void disk(float Ox, float Oy, float D, float d, float scale)
        {
            Graphics g = CreateGraphics();
            g.DrawEllipse(new Pen(Color.Black, 5), (float)Ox, (float)Oy, (float)(D * scale), (float)(D * scale));
            g.DrawEllipse(new Pen(Color.Black, 5), (float)Ox + (float)((D * scale - d * scale) / 2), (float)Oy + (float)((D * scale - d * scale) / 2), (float)(d * scale), (float)(d * scale));
            g.FillEllipse(new SolidBrush(Color.Black), (float)Ox + (float)((D * scale - d * scale) / 2), (float)(Oy + (D * scale - d * scale) / 2), (float)(d * scale), (float)(d * scale));
        }
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
23.01.2018, 13:35
Лучший ответ Сообщение было отмечено egrozavr как решение

Решение

Цитата Сообщение от egrozavr Посмотреть сообщение
Такая же ровно ошибка.
Сомневаюсь.
Если параметры сразу в float передавать, то и конвертировать не нужно.
Вот:
1
2 / 2 / 0
Регистрация: 21.01.2014
Сообщений: 57
23.01.2018, 15:26  [ТС]
Хм, дело оказалось немногим сложнее чем я думал. Все работает, если использовать стандартные директивы WF как в коде ниже.

C#
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        //диаметр диска
        float D = 276.0f;
        float d = 47.0f;
        float scale = 1.2f;
 
        //положение левого верхнего угла диска
        float Ox = 10.0f;
        float Oy = 10.0f;
 
        private void disk(float Ox, float Oy, float D, float d, float scale)
        {
            Graphics g = CreateGraphics();
            g.DrawEllipse(new Pen(Color.Black, 5), Ox, Oy, D * scale, D * scale);
            g.DrawEllipse(new Pen(Color.Black, 5), Ox + (D * scale - d * scale) / 2, Oy + (D * scale - d * scale) / 2, d * scale, d * scale);
            g.FillEllipse(new SolidBrush(Color.Black), Ox + (D * scale - d * scale) / 2, Oy + (D * scale - d * scale) / 2, d * scale, d * scale);
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            disk(Ox, Oy, D, d, scale);
        }
    }
}
Однако, помимо стандартных, я использую другие директивы. С ними то и возникает проблема. Хотя сам код один в один.

C#
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
using System;
using System.Drawing;
using System.Collections;
 
// ABB namespaces
using ABB.Robotics.Controllers;
using ABB.Robotics.Tps.Taf;
using ABB.Robotics.Tps.Windows.Forms;
 
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Drawing.Imaging;
using System.Windows.Forms;
 
namespace TpsViewIRC5App1
{
    public class TpsViewIRC5App1 : TpsControl, ITpsViewSetup, ITpsViewActivation
    {
        private ABB.Robotics.Tps.Windows.Forms.Button button1;
 
        public TpsViewIRC5App1()
        {
            InitializeComponent();
        }
 
// всякий генерируемый код
 
        int amount = 0;
        float tray_offset = 0.0f;
        float Y_offset = 0.0f;
        float X_offset = 0.0f;
 
        //диаметр диска
        float D = 276.0f;
        float d = 47.0f;
        float scale = 1.2f;
 
        //положение левого верхнего угла диска
        float Ox = 10.0f;
        float Oy = 10.0f;
 
        private void disk(float Ox, float Oy, float D, float d, float scale)
        {
            Graphics g = CreateGraphics();
            g.DrawEllipse(new Pen(Color.Black, 5), Ox, Oy, D * scale, D * scale);
            g.DrawEllipse(new Pen(Color.Black, 5), Ox + (D * scale - d * scale) / 2, Oy + (D * scale - d * scale) / 2, d * scale, d * scale);
            g.FillEllipse(new SolidBrush(Color.Black), Ox + (D * scale - d * scale) / 2, Oy + (D * scale - d * scale) / 2, d * scale, d * scale);
     }
 
        private void button1_Click(object sender, EventArgs e)
        {
         disk(Ox, Oy, D, d, scale);
        }
 
    }
}
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
23.01.2018, 16:01
egrozavr, занеси стандартные директивы в нэймспейс, видимо в ABB какие-то конфликты возникают.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// ABB namespaces
using ABB.Robotics.Controllers;
using ABB.Robotics.Tps.Taf;
using ABB.Robotics.Tps.Windows.Forms;
 
namespace TpsViewIRC5App1
{
using System;
using System.Drawing;
using System.Collections;
 
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Drawing.Imaging;
using System.Windows.Forms;
0
2 / 2 / 0
Регистрация: 21.01.2014
Сообщений: 57
23.01.2018, 16:14  [ТС]
Цитата Сообщение от ViterAlex Посмотреть сообщение
занеси стандартные директивы в нэймспейс, видимо в ABB какие-то конфликты возникают.
Не помогает.

Есть такая идея, что я не добавил какую то директиву, отвечающую за рисование. Такое возможно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.01.2018, 16:14
Помогаю со студенческими работами здесь

Как обойтись без float, double, long double?
К примеру мне надо в программе использовать что-то вроде -0,00000000000003626686812 и 0,00000000000002072392464. Притом чтобы считалось...

непонятка с переменными типа float
Здравствуйте! может кто подскажет, а то не почму к примеру создаю переменную типа ftoot 12.23 самое интересное когда смотрю...

Switch возможно ли работать с переменными типа float?
и если возможно, то почему на такой код switch (min) { case (r.USA): { } } , где min:float ...

Неточность double и float
Приведу 2 примера кода: Int a=10000001; float b=(float) a; a=(int)b; // "a" уже равно не 10000001, а 10000000 float...

Самописный double/float
Как сделать для Разности? Должны получиться такие результаты Для суммы: 2.3 Для разности: -0.1 ААа ещё будет лучше, если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru