mirror of
https://github.com/xibyte/jsketcher
synced 2025-12-10 10:25:36 +01:00
72 lines
1.2 KiB
Matlab
72 lines
1.2 KiB
Matlab
pkg load optim;
|
|
|
|
l1p1x = 1;
|
|
l1p1y = 2;
|
|
l1p2x = 3;
|
|
l1p2y = 4;
|
|
l2p1x = 5;
|
|
l2p1y = 6;
|
|
l2p2x = 7;
|
|
l2p2y = 8;
|
|
|
|
function out = g (x)
|
|
|
|
l1p1x = 1;
|
|
l1p1y = 2;
|
|
l1p2x = 3;
|
|
l1p2y = 4;
|
|
l2p1x = 5;
|
|
l2p1y = 6;
|
|
l2p2x = 7;
|
|
l2p2y = 8;
|
|
p = x{1};
|
|
out = [
|
|
(p(l2p1y) - p(l2p2y));
|
|
-(p(l2p1y) - p(l2p2y));
|
|
(p(l2p1x) - p(l2p2x));
|
|
-(p(l2p1x) - p(l2p2x));
|
|
(p(l1p1y) - p(l1p2y));
|
|
-(p(l1p1y) - p(l1p2y));
|
|
(p(l1p1x) - p(l1p2x));
|
|
-(p(l1p1x) - p(l1p2x));
|
|
];
|
|
|
|
endfunction
|
|
|
|
function out = phi (x)
|
|
|
|
l1p1x = 1;
|
|
l1p1y = 2;
|
|
l1p2x = 3;
|
|
l1p2y = 4;
|
|
l2p1x = 5;
|
|
l2p1y = 6;
|
|
l2p2x = 7;
|
|
l2p2y = 8;
|
|
p = x{1};
|
|
dx1 = (p(l1p1x) - p(l1p2x));
|
|
dy1 = (p(l1p1y) - p(l1p2y));
|
|
dx2 = (p(l2p1x) - p(l2p2x));
|
|
dy2 = (p(l2p1y) - p(l2p2y));
|
|
#dot product shows how the lines off to be perpendicular
|
|
off = dx1 * dx2 + dy1 * dy2;
|
|
out = off * off;
|
|
endfunction
|
|
|
|
|
|
|
|
l1 = [100, 100; 300, 600];
|
|
l2 = [400, 600; 600, 100];
|
|
|
|
|
|
x0 = [l1(1,1);l1(1,2);l1(2,1);l1(2,2); l2(1,1);l2(1,2);l2(2,1);l2(2,2)];
|
|
|
|
#[x, obj, info, iter, nf, lambda] = sqp (x0, @phi, @g, []);
|
|
|
|
[a,b,c] = cg_min (@phi, @g, x0);
|
|
|
|
|
|
#plot([l1(1), l1(2)], [l1(3), l1(4)], '-');
|
|
#plot(reshape(l2, 2, 2));
|
|
plot(l1(:,1), l1(:,2), l2(:,1), l2(:,2), '-');
|
|
|