【发布时间】:2013-09-16 05:14:42
【问题描述】:
我正在Matlab 从事一个项目,需要找到正方形[-1,+1]x[-1,+1] 内两条线之间的区域,它们与点(xIntersection,yIntersection) 相交。所以想法是减去两条线并在[-1,xIntersection]和[xIntersection,+1]之间积分,将结果相加,如果为负,则更改其符号。
有关如何找到两条线的交点的详细信息,请查看link。
我正在使用Matlab's 函数integral(),这里是我的代码的sn-p:
xIntersection = ((x_1 * y_2 - y_1 * x_2) * (x_3 - x_4) - (x_1 - x_2) * (x_3 * y_4 - y_3 * x_4) ) / ((x_1 - x_2) * (y_3 - y_4) - (y_1 - y_2) * (x_3 - x_4));
d = @(x) g(x) - f(x);
result = integral(d, -1, xIntersection) - int( d, xIntersection, 1)
if(result < 0),
result = result * -1;
end
请注意,我之前在代码中定义了g(x) 和f(x),但没有在sn-p 中报告。
问题是我很快意识到线条可以在正方形的内部或外部相交,而且它们可以在正方形的任何边上相交,并且可能的组合数量增长得非常快。
即:
这只是 4 种情况,但考虑到 f(+1), f(-1), g(+1), g(-1) 可能在区间 [-1,+1] 之内,高于它或在其下方,并且交叉点可能在正方形内部或外部,总数为 3*3*3*3*2 = 162。
显然,在每种情况下,为了获得两条线之间的区域而进行集成的显式函数是不同的,但我不可能想到为每条线编写一个 switch case。
有什么想法吗?
【问题讨论】:
-
你如何定义“字里行间”?如果直线呈 90°,会发生什么?
标签: algorithm matlab math algebra integrate