Форумы на Наша-Life
Home user CP  
Календарь событий Найти других пользователей Часто задаваемые Вопросы Поиск  
Автор
Тема
Создать Новую Тему    Ответить
Stridemann
(Инженер-изобретатель)

Зарегистрирован: Jun 2009
Проживает: Украина/Киев/
Написал: 2304 сообщений

Оценка: 95 Votes 95 чел.

Developer 
Простенькая задача по геометрии
Сообщение #1086601
Математику лет 7 назад учили, уже забыл все.. Прошу помощи)

Есть координатная плоскость на которой находится 2 точки (А и В). Известны их координаты. Так же имеем квадрат, центром которого является точка А. Проведем отрезок от А к В. Точка пересечения отрезка с какой-то гранью квадрата создаст точку К.
Задача: найти координаты точки К.

Для примера:
А(-5;-4)
B(5;3)
грань куба= 4.

Мне с этого нужно получить функцию (запрограммирую), чтобы я ввел в программе точку А и Б и оно сразу просчитало точку К.

Вот, даже видео отснял как функция должна просчитывать. https://www.youtube.com/watch?v=6nmFLiApQUs Видно как я двигаю зеленую точку, а красная описывает грани формы квадрата. Стрелка кагбы стремится к центру квадрата, но грани не пускают..
Прикрепленная картинка: [посмотреть в полный размер]
bfca1e69faa8f6468c6eff84e61746b7
Old Post 22-04-2013 20:11
Stridemann отсутствует Посмотреть данные 'Stridemann' Отправить Приватное Сообщение для 'Stridemann' Найти другие сообщения 'Stridemann' Добавить Stridemann в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Stridemann
(Инженер-изобретатель)

Зарегистрирован: Jun 2009
Проживает: Украина/Киев/
Написал: 2304 сообщений

Оценка: 95 Votes 95 чел.

Developer 
Сообщение #1086602
Мне говорили что делается с помощью 2-х треугольников.

Красный треугольник для определения угла. В синем треугольнике нам известны 2 угла: 90 град (AFK) и угол с красного квадрата(CAB) и сторона AF= половине грани квадрата..
Прикрепленная картинка: [посмотреть в полный размер]
02159c0d08ad8b1fb22a6a31769293d6
Old Post 22-04-2013 20:19
Stridemann отсутствует Посмотреть данные 'Stridemann' Отправить Приватное Сообщение для 'Stridemann' Найти другие сообщения 'Stridemann' Добавить Stridemann в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
ratmanhunt3r
(Junior Member)

Зарегистрирован: Apr 2013
Проживает: Russian Federation/
Написал: 1 сообщений

Оценка: 0 Votes

Сообщение #1086603
Синий и красный треугольники подобны, соответственно AK/AB = AF/AC=X.

Из этого легко находишь отношение AK к AB. Из отношения попробуй выцепить координату K
X = AF/AC найдешь при помощи координат легко.
Old Post 22-04-2013 21:15
ratmanhunt3r отсутствует Посмотреть данные 'ratmanhunt3r' Отправить Приватное Сообщение для 'ratmanhunt3r' Найти другие сообщения 'ratmanhunt3r' Добавить ratmanhunt3r в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Stridemann
(Инженер-изобретатель)

Зарегистрирован: Jun 2009
Проживает: Украина/Киев/
Написал: 2304 сообщений

Оценка: 95 Votes 95 чел.

Developer 
Сообщение #1086604
Цитата:
Оригинальное сообщение от ratmanhunt3r
Синий и красный треугольники подобны, соответственно AK/AB = AF/AC=X.
Из этого легко находишь отношение AK к AB. Из отношения попробуй выцепить координату K
X = AF/AC найдешь при помощи координат легко.

Пока не понимаю..


Я пробовал делать так:
1) Найти насколько дальше\выше В от А: В(5:3) - А(-5;-4) =10;7
2) Найти соотношение увеличения по x\y:

10+7 = 17 (кол-во частей для соотношения)
2/17 = 0.12 (делим половину грани квадрата, т. е насколько отдалится К от А)
1.41/2 = 0.705 (2п/2. Будем потом добавлять диагональку чтоб не ромб а квадрат описывало).

10*0.12 = 1.2 (увеличение ромб по х)
1.2*0.705 = 0.846 (увеличение для квадрата)
1.2+0.846 = 2.046 (увеличение квадрат по х)

7*0.12 = 0.8 (увеличение ромб по у)
0.8*0.705 = 0.564 (увеличение для квадрата)
0.8+0.564 = 1.364 (увеличение квадрат по у)

3) Координата К = А(-5;-4) + (2.046;1.364) = К(-2,954; -2,636)

К(-2,954; -2,636)

Оочень долго и сложно, но в принципе правильно просчитывает.. +-1% точности. Этого с головой мне хватит.
НО НЕЛЬЗЯ ЛИ УПРОСТИТЬ? Будет очень быстрая обработка, примерно по 30 таких задач в секунду.

PS. Запрограммировал. Считает не правильно(

Поправил Stridemann 22-04-2013 в 23:32

Old Post 22-04-2013 22:13
Stridemann отсутствует Посмотреть данные 'Stridemann' Отправить Приватное Сообщение для 'Stridemann' Найти другие сообщения 'Stridemann' Добавить Stridemann в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
KorDen
(Senior Member)

Зарегистрирован: Jul 2010
Проживает: /
Написал: 1729 сообщений

Оценка: 27 Votes 27 чел.

Сообщение #1086605
Треугольники подобны, или проще говоря равные углы. Зная AC И BC, можем найти тангенс угла BAC=KAF.
AF это половина длины стороны квадрата.
FK/AF=tgKAF=tgBAC=BC/AC.
FK=(BC*AF)/AC
Конечно в случаях, когда квадрат вращается получается сложнее.. Или он по любому будет под прямым углом к осям?

А, и чтобы не было вопроса, точку C можно узнать, взяв координату X от точки B и координату Y от точки A... А там через векторы вычислить длину
Либо гораздо проще - AC=Bx-Ax, BC=By-Ay
Но опять же, если квадрат не повернут

Поправил KorDen 23-04-2013 в 05:30

Old Post 23-04-2013 05:27
KorDen отсутствует Посмотреть данные 'KorDen' Отправить Приватное Сообщение для 'KorDen' Найти другие сообщения 'KorDen' Добавить KorDen в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Grang_2k
(Тупо мяу)

Зарегистрирован: May 2007
Проживает: Россия/Владивосток
Написал: 2512 сообщений

Старожил 
Сообщение #1086607
Тред не читал, сразу отвечал.
Если тебе это нужно сделать программированием, то можно алгебраически (или векторами, тут близко), если надо точно и относительно быстро.
Задаем уравнение прямой AB: y=(7/10)*Х-0.5 (общая формула, если нужно - y=kx+m). k, кстати, угловой коэффициент и есть тангенс твоего угла, по идее ты легко сможешь его задать с помощью проекций.
Задаем уравнение стороны квадрата: х=-3 (это прямая, которая содержит сторону квадрата)
Подставляем
y=(7/10)*(-3)-0.5=2.6
Done.
Ах да, по идее ты можешь задать уравнение без m, т.к. она у тебя константа. Для этого задай прямую вот так: y=k(x+5)-4 Если квадратик у тебя не вертится, но любит менять свой центр, то делай так: y=k(x-а)+b, где а - центр квадрата по оси Х, а b - по y.

Поправил Grang_2k 23-04-2013 в 11:49

Old Post 23-04-2013 11:19
Grang_2k отсутствует Посмотреть данные 'Grang_2k' Отправить Приватное Сообщение для 'Grang_2k' Найти другие сообщения 'Grang_2k' Добавить Grang_2k в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
 
Stridemann
(Инженер-изобретатель)

Зарегистрирован: Jun 2009
Проживает: Украина/Киев/
Написал: 2304 сообщений

Оценка: 95 Votes 95 чел.

Developer 
Сообщение #1086610
Спасибо ребята за помощь)
Квадрат никогда не будет вращаться.
Да, программировать на с++ буду.

Grang_2k
>> y=(7/10)*(-3)-0.5=2.6
Каким-то чудом для данной задачи работает (попахивает Девидом Блэйном) , но не понимаю что такое 0.5 )

И как вычистить ту линию -3 ? Нужно как-то просчитать с какой гранью будет пересекаться линия.. Возможны 4 варианта: -3, -2, 3, 2. Это как-то через вычисления угла АВ сделать? Если более 45 град= -2, более 135= 3, >225= 2, >315=-3

Прикрепил новую задачу.. В этом случае эта линия будет -2. И эта формула (y=(7/10)*(-3)-0.5=2.6) не работает..
Прикрепленная картинка: [посмотреть в полный размер]
39cf2875c1e45fb5cb2e7f291581a2e3

Поправил Stridemann 23-04-2013 в 18:30

Old Post 23-04-2013 14:45
Stridemann отсутствует Посмотреть данные 'Stridemann' Отправить Приватное Сообщение для 'Stridemann' Найти другие сообщения 'Stridemann' Добавить Stridemann в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Stridemann
(Инженер-изобретатель)

Зарегистрирован: Jun 2009
Проживает: Украина/Киев/
Написал: 2304 сообщений

Оценка: 95 Votes 95 чел.

Developer 
Сообщение #1086614
Слушал многих, считал ихними способами.. в конце концов нефига не понял, закинул и сделал своим способом.. Работает: https://dl.dropboxusercontent.com/u/66755699/11.jpg

*когда нет времени делать правильно..*

Поправил Stridemann 23-04-2013 в 18:31

Old Post 23-04-2013 18:20
Stridemann отсутствует Посмотреть данные 'Stridemann' Отправить Приватное Сообщение для 'Stridemann' Найти другие сообщения 'Stridemann' Добавить Stridemann в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Grang_2k
(Тупо мяу)

Зарегистрирован: May 2007
Проживает: Россия/Владивосток
Написал: 2512 сообщений

Старожил 
Сообщение #1086619
Цитата:
И эта формула (y=(7/10)*(-3)-0.5=2.6) не работает..

Эм, формула как раз y=kx+m (с циферками - это частный случай, я просто подсчитал), а 0.5 - это сдвиг по оси оу на 0.5. Впрочем, это уже не нужно.

Поправил Grang_2k 23-04-2013 в 20:50

Old Post 23-04-2013 20:44
Grang_2k отсутствует Посмотреть данные 'Grang_2k' Отправить Приватное Сообщение для 'Grang_2k' Найти другие сообщения 'Grang_2k' Добавить Grang_2k в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Stridemann
(Инженер-изобретатель)

Зарегистрирован: Jun 2009
Проживает: Украина/Киев/
Написал: 2304 сообщений

Оценка: 95 Votes 95 чел.

Developer 
Сообщение #1086627
>>Grang_2k
Спасибо) Да, уже не нужно.. Как оказалось по другому решил.


Если интересно, вот для чего эта функция предназначалась- http://clip2net.com/s/4XTBLQ (кто в шарит тот поймет).
Правильный линкинг элементов аутпутами.
Я делаю конвертер vmt->svg. Исходники Valve Hameer Editor'а конвертирует в 2д векторную графику. Расставляет логические элементы и прорисовывает их соединения.
Old Post 24-04-2013 01:52
Stridemann отсутствует Посмотреть данные 'Stridemann' Отправить Приватное Сообщение для 'Stridemann' Найти другие сообщения 'Stridemann' Добавить Stridemann в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Все время в GMT . Сейчас 15:44.
Создать Новую Тему    Ответить

Быстрый ответ
Ваше Имя:
Хотите Зарегистрироваться?
Ваш Пароль:
Забыли свой Пароль?
Вы можете оставлять свои комментарии анонимно, просто введя свои имя и оставив пустым поле пароля.
Ваш ответ:

[проверить размер]
[транслит в win] | [?]
[русская клавиатура]

Дополнительно: Подтверждение по E-Mail


Быстрый переход:
 
Оцените эту Тему:
 

Правила форума:
Создание Тем не разрешено
Создание Сообщений разрешено
Создавать Вложения не разрешено
Редактирование Сообщений не разрешено
Коды HTML запрещены
Коды форума разрешены
Смайлики разрешены
Коды [IMG] запрещены