реклама на сайте
подробности

 
 
> Как нарисовать стрелку в С++?, Рисование в Image
skyfoxx
сообщение May 12 2009, 11:02
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 12-05-09
Пользователь №: 48 956



Есть x1,y1 начало линии и x2,y2 конец линии. Нарисовать в конце линии две линии образующие крылья стрелки. Координаты x1,y1,x2,y2 будут задаваться произвольно, направление крыльев стрелки должно меняться автоматически.

Стрелка должна отображатся в Image smile3046.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Genadi Zawidowsk...
сообщение May 12 2009, 17:41
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Я рисовал в фотошопе стрелку - потом поворачивал её на нужный угол - и записывал. Попробуйте сделать хоть 36 образов стрелки и взяв угол с точностью 10 градусов выбрать нужный имедж для рисованя


Код
    static UINT ids [12] =
    {
        IDI_ARROW_0G0, IDI_ARROW_0G1, IDI_ARROW_0G2, IDI_ARROW_0G3,
        IDI_ARROW_0G4, IDI_ARROW_0G5, IDI_ARROW_0G6, IDI_ARROW_0G7,
        IDI_ARROW_0G8, IDI_ARROW_0G9, IDI_ARROW_0G10, IDI_ARROW_0G11,

    };
    for (int i = 0; i < 12; ++ i)
    {
        arrowPoint [i] = AfxGetApp()->LoadIcon(ids [i]);
    }

...

    {
        int iangle = ((m_iAngle - m_iOffset + FULL_CIRCLE)%(FULL_CIRCLE));
        double angle = iangle / 3600 * PI * 2 / 360;

        int yTarget = - (int) (radius * cos(angle) * 0.85);
        int xTarget = (int) (radius * sin(angle) * 0.85);
        int yTarget0 = - (int) (radius * cos(angle) * 0.1);
        int xTarget0 = (int) (radius * sin(angle) * 0.1);

        m_invisibleDc.SelectObject(m_darkRedPen);
        m_invisibleDc.SelectObject(m_darkRedBrush);

        m_invisibleDc.MoveTo(cpt.x + xTarget0, cpt.y + yTarget0);
        VERIFY(m_invisibleDc.LineTo(cpt.x + xTarget, cpt.y + yTarget));

        {
            int zoneAngle = ((iangle + 15 * 3600) / (3600 * 30)) % 12;
            ASSERT(zoneAngle < 12);
            CPoint cp = CPoint(cpt.x + xTarget, cpt.y + yTarget);
            VERIFY(m_invisibleDc.DrawIcon(cp.x + iconXOffset, cp.y + iconYOffset, arrowPoint [zoneAngle]));
        }
    }


Сообщение отредактировал Genadi Zawidowski - May 12 2009, 17:43
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th August 2025 - 15:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.01376 секунд с 7
ELECTRONIX ©2004-2016