Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 1
Регистрация: 13.02.2012
Сообщений: 65

Вычисление 2 точек на границе прямоугольника, зная точку внутри прямоугольника и Тангенс угла наклона

19.11.2012, 18:59. Показов 2686. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите понять общий алгоритм....(

Вычисление 2 точек на границе прямоугольника, зная точку внутри прямоугольника и Тангенс угла наклона прямой, построив которую находим эти 2 точки на границах прямоугольника....

Дано ширина, высота многоугольника, х,у точки, через которую проходит линия, Тангенс угла наклона.

Требуется - построить прямую линию, проходящую через заданную точку с заданным углом наклона...
Казалось бы, что все просто....
У меня почему то нормально стоит только над диагональю, а все, что под - начинает безбожно врать...(

В чем ошибка и недоработка, делаю так

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
float k = Math::Tan(angle*(Math::PI / 180)); //вычисляю тангенс угла
int b = yDat - k * xDat; //count B b=y-k*x = вычисляю коэф и из уравнения y = kx+b
 
if (x==0){
y = b;
if (y<0){ // under the map
y = 0;
x = -b/k;
}else if (y>h){ //upper the map
y=h;
x=-b/k;
}
}else if (x==w){ //if cross xMax
y = k*x +b;
if (y>h){ //upper the map
y=h;
x=b/k;
}else if (y<0){ // under the map
y = 0;
x = -b/k;
}
}else if (0<x<w){
y = k*x +b;
}
PointF xTsyTs = PointF(x,y); // точка на границе прямоугольника с одной стороны.
Затем меняем Тангенс, прибавляя 180 и считаем точку на другой стороне прямоугольника. Соединяем точки, но не получаем искомую линию, если ниже диагонали....((
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.11.2012, 18:59
Ответы с готовыми решениями:

Определить, где находится текущая точка: внутри прямоугольника, снаружи, на границе прямоугольника
Представьте, что у вас на форме есть прямоугольник, границы которого на 10 пикселей отстоят от границ рабочей области формы. Необходимо...

Тангенс угла в прямоугольном треугольнике зная тангенс другого угла
Пускай имеем прямоугольный треугольник. Знаем тангенс одного из не прямых углов. Как найти тангенс второго угла?

тангенс угла наклона аппроксимационной прямой
Добрый вечер. Собственно есть точки по оси абсцисс и ординат. Надо найти тангенс угла наклона аппроксимационной прямой. %Y1 = ; Y1 = ; ...

7
1968 / 824 / 115
Регистрация: 01.10.2012
Сообщений: 4,874
Записей в блоге: 2
20.11.2012, 16:32
Если Вы говорите что точка и угол наклона заданы, то прямая тем самым определена. Тогда причем здесь прямоугольник? Также что такое "2 точки на границе" - теряюсь в догадках. Может имелись ввиду 2 угловые точки?

С таким мутным описанием задачи шансы на ответ = нулю.
0
0 / 0 / 1
Регистрация: 13.02.2012
Сообщений: 65
20.11.2012, 18:50  [ТС]
Во вложении - на фотке я попытался нарисовать условие задачи.
Знаем ширину, высоту окна Координаты точки на линии и угловой коэффициент. Надо найти 2 точки пересечения этой линии с краями плоскости.....

Я попробовал сосчитать, используя формулы - итоговую...
Кк я понимаю найти можно следующим образом формулу по которой считать в дальнейшем
a/sin(alf)=b/sin(bet) значит
a' = b*еп(alf)
b' = a * tg(bet)
где a и b - длины соответствующих сторон вспомогательных треугольников
Значит полная формула

aa = x + y*tg(alf)
и
bb=y+x*tg(bet)

Но, если этим пользоваться, то находим только пересечения на осях....
Значит, если противоположные стороны прямоугольника, то сдвигаем оси, а потом считаем???
Миниатюры
Вычисление 2 точек на границе прямоугольника, зная точку внутри прямоугольника и Тангенс угла наклона  
0
1968 / 824 / 115
Регистрация: 01.10.2012
Сообщений: 4,874
Записей в блоге: 2
20.11.2012, 19:22
Цитата Сообщение от Mpjoke Посмотреть сообщение
Знаем ширину, высоту окна Координаты точки на линии и угловой коэффициент. Надо найти 2 точки пересечения этой линии с краями плоскости.....
Вот на Вашем рисунке представьте кто-то взял прямоугольник и чуть его сдвинул. Конечно точки пересечения уже изменятся. Др словами все равно не хватает одного данного. Вот если бы Вы сказали что точка A (через которую проходит прямая) есть ЦЕНТР прямоугольника - тогда др дело
0
0 / 0 / 1
Регистрация: 13.02.2012
Сообщений: 65
21.11.2012, 00:01  [ТС]
К сожалению она не центр.....
У нас есть только координаты точки А и коэфф-т К...
+ размеры плоскости, зная это мне необходимо построить прямую линию на данной плоскости...(
А в С++/CLR при использовании PictureBox я могу строить прямые линии, вот я и решил, что если найти крайние координаты прямой на плоскости, то спокойно смогу построить прямую, проходящую через заданную точку с заданным коэф-том наклона этой прямой...
Используя у = х*к + в я могу построить все, как надо, но выше диагонали, а вот как строить, если прямая ниже диагонали - неизвестно...(
Я помню в школе, 10 лет назад - похожие задачи решали, но покка не дошел, как это сделать быстро и просто...
Можно нагородить кучу if-else, хочется проще, но как....
0
1968 / 824 / 115
Регистрация: 01.10.2012
Сообщений: 4,874
Записей в блоге: 2
21.11.2012, 14:10
Цитата Сообщение от Mpjoke Посмотреть сообщение
Я помню в школе, 10 лет назад - похожие задачи решали, но покка не дошел, как это сделать быстро и просто...
Можно нагородить кучу if-else, хочется проще, но как....
Вам как-то надо прямоугольник "закрепить". Например такие данные

- прямоугольник задан 2-мя угловыми точками (p0, p1)
- есть точка A внутри + угол наклона alpha

Тогда все просто

C++
1
2
3
4
5
6
7
8
9
double dist = (p1.x - A.x)  / cos(alpha);   // расстояние (знаковое) до правой стороны
double y = A.y + dist * sin(alpha);
if (y >= p0.y && y <= p1.y)
 // пересечение на правой стороне в точке (p1.x, y)
 
// Далее аналогично
double dist = (p0.x - A.x)  / cos(alpha);   // до левой 
double dist = (p1.y - A.y)  / sin(alpha);   // до верхней
double dist = (p0.y - A.y)  / sin(alpha);   // до нижней
Ну конечно учесть что sin/cos могут быть нулевыми или слишком малыми
0
0 / 0 / 1
Регистрация: 13.02.2012
Сообщений: 65
23.11.2012, 00:30  [ТС]
Огромное спасибо, сейчас буду пробовать...)

Добавлено через 57 минут
А если угла наклона нет, а есть только отношение углов, т.е. тангенс alfa? или коэф-т K, что собственно одно и то же...
0
1968 / 824 / 115
Регистрация: 01.10.2012
Сообщений: 4,874
Записей в блоге: 2
23.11.2012, 11:43
Цитата Сообщение от Mpjoke Посмотреть сообщение
А если угла наклона нет, а есть только отношение углов, т.е. тангенс alfa? или коэф-т K, что собственно одно и то же...
Так есть ф-ция atan Еще лучше задавать прямую 2-мя точками, тогда вместо

cos(alpha) -> (x2 - x1)
sin(alpha) -> (y2 - y1)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.11.2012, 11:43
Помогаю со студенческими работами здесь

Сделать возможным перемещение прямоугольника за любую точку внутри него
Сори за вторую тему. код я написал помогите пожалуйста как сделать эти задания 1)Сделать возможным перемещение прямоугольника за...

Сделать возможным перемещение прямоугольника за любую точку внутри него
Здравствуйте. помогите пожалуйста с заданиями 1)Сделать возможным перемещение прямоугольника за любую точку внутри него 2)добавить...

Определить, сколько из точек находится внутри прямоугольника.
Ребят,помогите пожалуйста,будьте добры. Надо составить программки в Паскале. Составить математическую модель, таблицу идентификаторов...

Определить количество точек, находящихся внутри прямоугольника
Задано n точек. Определить, сколько из них находится внутри прямоугольника

Вывести сумму координат всех точек внутри прямоугольника
Написать программу, выводящую сумму расстояний до начала координат всех точек, имеющих целочисленные координаты и находящиеся внутри...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера 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