Как найти биссектрису угла в MATLAB - PullRequest
0 голосов
/ 13 октября 2010

У меня есть вопрос, связанный с этим кодом:

t = -20:0.1:20; 
plot3(zeros(size(t)),t,-t.^2);
grid on
hold on
i = 1;
h = plot3([0 0],[0 t(i)],[0 -t(i)^2],'r');
h1 = plot3([-1 0],[0 0],[-400 -200],'g');
for(i=2:length(t))
    set(h,'xdata',[-1 0],'ydata',[0 t(i)],'zdata',[-400 -t(i)^2]);    
    pause(0.01);
end

В этом коде я рисую две пересекающиеся линии.H1 и H2.H1 фиксирован, H2 движется как функция времени.В этом примере H2 отслеживает параболу, но ее движение может быть произвольным.

Как вычислить и нарисовать биссектрису угла между этими двумя пересекающимися линиями для каждой позиции линии H2?Я хотел бы видеть на графике, что биссектриса и прямая H2 движутся одновременно.

Решение этой проблемы для одной позиции H2 достаточно, так как она будет одинаковой для всех ориентаций относительной H2до H1.

Ответы [ 2 ]

1 голос
/ 14 октября 2010

Вот в основном метод MatlabDoug с некоторым улучшением определения точки, которую он называет M.

t = -20:0.1:20;
plot3(zeros(size(t)),t,-t.^2);
grid on
hold on

v1 = [1 0 200];
v1 = v1/norm(v1);

i = 1;

h = plot3([-1 0],[0 t(i)],[-400 -t(i)^2],'r');
h1 = plot3([-1 0],[0 0],[-400 -200],'g');

l = norm([1 t(i) -t(i)^2+400]);
p = l*v1 + [-1 0 -400];
v2 = (p + [0 t(i) -t(i)^2])/2 - [-1 0 -400];
p2 = [-1 0 -400] + v2/v2(1);
h2 = plot3([-1 p2(1)],[0 p2(2)],[-400 p2(3)],'m');

pause(0.1)

for(i=2:length(t))
    l = norm([1 t(i) -t(i)^2+400]);
    p = l*v1 + [-1 0 -400];
    v2 = (p + [0 t(i) -t(i)^2])/2 - [-1 0 -400];
    p2 = [-1 0 -400] + v2/v2(1);

    set(h,'xdata',[-1 0],'ydata',[0 t(i)],'zdata',[-400 -t(i)^2]);
    set(h2,'xdata',[-1 p2(1)],'ydata',[0 p2(2)],'zdata',[-400 p2(3)]);

    pause;
end
1 голос
/ 13 октября 2010

Я не гений геометрии, вероятно, есть более простой способ сделать это. Пока никто не ответил, так что это будет что-то.

У вас есть три точки в трех местах: Пусть A - общая вершина двух отрезков.
Пусть B и C - две известные точки на двух отрезках.

Выберите произвольное расстояние r, где

r <= расстояние от A до B </p>

r <= расстояние от A до C </p>

Измерьте от A вдоль отрезка AB расстояние r. Это точка рб Измерьте от A вдоль отрезка прямой AC расстояние или r. Это точка RC

Найдите среднюю точку отрезка, соединяющего RB и RC. Это точка М

Сегмент AM - это угловой биссектриса угла CAB.


Каждый из этих шагов должен быть относительно простым для выполнения.

...