Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нарисовать линию со стрелкой на конце, А еще лучше дугу 
:(
    Опции темы
specter50000
Дата 22.12.2007, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 22.12.2007

Репутация: нет
Всего: нет



Всем доброго времени суток. Вот появилась необходимасть нарисовать
такую вещь. Ну если рисовать прямую там все более-менее понятно,
а вот как с дугой быть? Может кто чем поможет? Заранее спасибо!
PM MAIL   Вверх
jonie
Дата 22.12.2007, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



Код

            const float ostrota = 0.25;
            const float ostrie = 20;
            float f1x2 , f1y2, f2x2, f2y2;
            float ugolstrelki = Math::Atan2( y2-y1 , x2-x1 );
            f1y2 = Math::Sin(ugolstrelki + ostrota + Math::PI )*ostrie + y2 + 100 ;
            f1x2 = Math::Cos(ugolstrelki + ostrota + Math::PI )*ostrie + x2 + 100 ;
            f2y2 = Math::Sin(ugolstrelki - ostrota + Math::PI )*ostrie + y2 + 100 ;
            f2x2 = Math::Cos(ugolstrelki - ostrota + Math::PI )*ostrie + x2 + 100 ;
только в с++ перепиши)


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
EnergoHokum
Дата 23.12.2007, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



В где рисовать-то? В консоли псевдографикой или в оконном приложении? Если в окне, то можно средствами WinAPI (точнее, GDI+) отрисовывать и прямые, и дуги, и ломаные, кажись, даже кривые Безье можно рисовать.
PM MAIL ICQ   Вверх
specter50000
Дата 23.12.2007, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 22.12.2007

Репутация: нет
Всего: нет



Цитата(jonie @  22.12.2007,  22:27 Найти цитируемый пост)
 float f1x2 , f1y2, f2x2, f2y2;
            float ugolstrelki = Math::Atan2( y2-y1 , x2-x1 );

Не совсем понятно, что эти переменные значат. Можно поподробнее?
PM MAIL   Вверх
zkv
Дата 23.12.2007, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



specter50000, ты лучше на вопросы ответь сначала:
Цитата(EnergoHokum @  23.12.2007,  14:07 Найти цитируемый пост)
В где рисовать-то? В консоли псевдографикой или в оконном приложении?

а то разговор ни о чем получается  smile 
PM MAIL   Вверх
specter50000
Дата 23.12.2007, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 22.12.2007

Репутация: нет
Всего: нет



Рисовать нужно в окне, используя CDC  smile 
PM MAIL   Вверх
zkv
Дата 23.12.2007, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(specter50000 @  23.12.2007,  15:26 Найти цитируемый пост)
Рисовать нужно в окне, используя CDC

MFC значит.
Цитата(specter50000 @  23.12.2007,  14:49 Найти цитируемый пост)
Не совсем понятно, что эти переменные значат.

очевидно - это координаты начала и конца стрелки.
PM MAIL   Вверх
specter50000
Дата 23.12.2007, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 22.12.2007

Репутация: нет
Всего: нет



Цитата(zkv @  23.12.2007,  15:29 Найти цитируемый пост)
очевидно - это координаты начала и конца стрелки. 

Это про

float f1x2 , f1y2, f2x2, f2y2 ,

я правильно понимаю?

А х1, у1, х2 и у2 зачем нужны, не могли бы пояснить?  smile 




PM MAIL   Вверх
jonie
Дата 23.12.2007, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



Цитата

А х1, у1, х2 и у2 зачем нужны, не могли бы пояснить?  
координаты начала и конца линии где надо рисовать стрелку
Цитата

float f1x2 , f1y2, f2x2, f2y2 ,
координаты, вычисляемые, стрелки - полигон читай.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
zkv
Дата 23.12.2007, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(specter50000 @  23.12.2007,  15:32 Найти цитируемый пост)
Это про

float f1x2 , f1y2, f2x2, f2y2 ,

я правильно понимаю?

А х1, у1, х2 и у2 зачем нужны, не могли бы пояснить?

прошу прощения, невнимательно посмотрел в код.
PM MAIL   Вверх
jonie
Дата 23.12.2007, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



Код

const double M_PI = 3.14;
double Gug = 150;
double Lstr = 25;
int RetGrad(int w,int h)
{
    float fw=w,fh=h,fg=sqrt(fw*fw+fh*fh),fs,fc;
    if(fg==0) return 0;
    fs=fh/fg;fc=fw/fg;
    if(fs>=0) return 180.0*acos(fc)/3.14;
    else return 360.0-180.0*acos(fc)/3.14;
}


void DrawVector(HDC hdc, int bx, int by, int ex, int ey)
{
    int ug;
    POINT poly[3];

    MoveToEx(hdc,bx,by,0);
    LineTo(hdc,ex,ey);
    ug=RetGrad(ex-bx,ey-by);
    ug=ug-Gug;
    poly[0].x=ex;
    poly[0].y=ey;
    poly[1].x=ex+Lstr*cos(ug*M_PI/180);
    poly[1].y=ey+Lstr*sin(ug*M_PI/180);
    ug=ug+2*Gug;
    poly[2].x=ex+Lstr*cos(ug*M_PI/180);
    poly[2].y=ey+Lstr*sin(ug*M_PI/180);
    SetPolyFillMode(hdc,WINDING);
    Polygon(hdc,poly,3);
}




--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
specter50000
Дата 23.12.2007, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 22.12.2007

Репутация: нет
Всего: нет



Кажется, разобрался... Спасибо  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1079 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.