Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Рисование линий нужной длинны  (Прочитано 2594 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн DoublePain

  • Автор темы
  • Активист
  • *
  • Сообщений: 574
    • Просмотр профиля
Рисование линий нужной длинны
« : 30 Апреля 2012, 04:02:12 »
Доброе время суток!

Интересует вопрос: допустим хочу нарисовать линию длинною в 50 пикселов, есть начальные кординаты(0,0) и конечные(400,400), как мне определить положение конечной точки для линии длинной в 50 пикселов?
pain projection
Athlon II 620 x4 2.66GHz,4gb,Radeon HD4670 + Ubuntu 12.04 x64
Получено 2 845 kБ за 4с (666 kБ/c)


Оффлайн DoublePain

  • Автор темы
  • Активист
  • *
  • Сообщений: 574
    • Просмотр профиля
Re: Рисование линий нужной длинны
« Ответ #2 : 30 Апреля 2012, 04:39:35 »
При чём тут теорема Пифагора?))
pain projection
Athlon II 620 x4 2.66GHz,4gb,Radeon HD4670 + Ubuntu 12.04 x64
Получено 2 845 kБ за 4с (666 kБ/c)

Оффлайн mkarasik

  • Участник
  • *
  • Сообщений: 163
    • Просмотр профиля
Re: Рисование линий нужной длинны
« Ответ #3 : 30 Апреля 2012, 04:51:33 »
 :'(
Если не знаешь элементарной геометрии, чего лезешь в программирование графики?

Есть 2 волшебных слова гипотенуза и катет. Ссылку на теорему Пифагора я уже давал, не поймешь жди, когда более сердобольные формучане проснутся и об'яснят.

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Рисование линий нужной длинны
« Ответ #4 : 30 Апреля 2012, 10:36:48 »
Ой как всё запущено...

Длина в 50 пикселов... ежкин кот... Я то думал что у нас принята система измерения Си

Но теорема пифагора это конечно ты из далека зашел. ему теорему о подобных треугольниках гуглить надо.

Оффлайн DoublePain

  • Автор темы
  • Активист
  • *
  • Сообщений: 574
    • Просмотр профиля
Re: Рисование линий нужной длинны
« Ответ #5 : 30 Апреля 2012, 15:42:11 »
О, любители покритиковать, а не помочь =)

Gekko, длина линии из 0,0 в 400, 400 будет очень большой и никак не 50 пикселов.
pain projection
Athlon II 620 x4 2.66GHz,4gb,Radeon HD4670 + Ubuntu 12.04 x64
Получено 2 845 kБ за 4с (666 kБ/c)

Оффлайн SergeyIT

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5589
  • Все по палатам!
    • Просмотр профиля
Re: Рисование линий нужной длинны
« Ответ #6 : 30 Апреля 2012, 16:26:26 »
(35;35)
Извините, я все еще учусь

andrey_p

  • Гость
Re: Рисование линий нужной длинны
« Ответ #7 : 30 Апреля 2012, 16:32:18 »
(35.35, 35.35)  ;)

Оффлайн SergeyIT

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5589
  • Все по палатам!
    • Просмотр профиля
Re: Рисование линий нужной длинны
« Ответ #8 : 30 Апреля 2012, 16:56:09 »
andrey_p,
И как подсветить дробные пикселы? :)
Извините, я все еще учусь

andrey_p

  • Гость
Re: Рисование линий нужной длинны
« Ответ #9 : 30 Апреля 2012, 16:59:44 »
andrey_p,
И как подсветить дробные пикселы? :)
Это для масштабирования при переносе на 3-й айпад. :) А вообще-то, просто цифры красивые получились, ну и чтоб ТС запутать. )))

А для ТС - теорему Пифагора надо знать!

Оффлайн SergeyIT

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5589
  • Все по палатам!
    • Просмотр профиля
Re: Рисование линий нужной длинны
« Ответ #10 : 30 Апреля 2012, 17:05:22 »
andrey_p,
Какой Пифагор? Это не актуально, в его время о пикселах не знали... палкой на песке рисовали
Извините, я все еще учусь

Оффлайн DoublePain

  • Автор темы
  • Активист
  • *
  • Сообщений: 574
    • Просмотр профиля
Re: Рисование линий нужной длинны
« Ответ #11 : 30 Апреля 2012, 18:05:16 »
Да то я ночью с трудом соображал. Слепил вчера функцию, которая по теореме пифагора рисует линию нужной длинны. Но блин, уже часов 12, не могу понять почему у меня значение гипотенузы С остаётся одинаковым, 6,95...

    QPoint current_line(QPoint first, QPoint second, int angle)
    {
        QPoint result;
        int a,b;
        double c;

        a = second.x() - first.x();
        b = second.y() - first.y();

        c = round(sqrt(round(pow(a,2)+pow(b,2))))/50;
        a = a/c;
        b = b/c;

        result.setX(first.x()+a);
        result.setY(first.y()+a);

        return result;
    }

Уже и так, и сяк, не работает:(
pain projection
Athlon II 620 x4 2.66GHz,4gb,Radeon HD4670 + Ubuntu 12.04 x64
Получено 2 845 kБ за 4с (666 kБ/c)

Оффлайн SergeyIT

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5589
  • Все по палатам!
    • Просмотр профиля
Re: Рисование линий нужной длинны
« Ответ #12 : 30 Апреля 2012, 21:59:05 »
  result.setY(first.y()+a);
И считай все в double, преобразуй только для возвращения результата
« Последнее редактирование: 30 Апреля 2012, 22:02:00 от SergeyIT »
Извините, я все еще учусь

Оффлайн DoublePain

  • Автор темы
  • Активист
  • *
  • Сообщений: 574
    • Просмотр профиля
Re: Рисование линий нужной длинны
« Ответ #13 : 01 Мая 2012, 02:02:30 »
Спасибо =)

Теперь другой вопрос, из произвольной точки надо проложить линию, под углом 45 градусов. Как узнать конечные точки?
через y = kx+b не вышло
y = qTan(45*3.14/180)*(first.x()+a)+(first.y()+b);
« Последнее редактирование: 01 Мая 2012, 02:23:04 от DoublePain »
pain projection
Athlon II 620 x4 2.66GHz,4gb,Radeon HD4670 + Ubuntu 12.04 x64
Получено 2 845 kБ за 4с (666 kБ/c)

Оффлайн Phlya

  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: Рисование линий нужной длинны
« Ответ #14 : 01 Мая 2012, 02:26:53 »
Под углом к чему? И какой длины?
Ubuntu 14.04 (Unity), MSI GE40

 

Страница сгенерирована за 0.071 секунд. Запросов: 25.