PDA

查看完整版本 : [MATLAB基础] [求助]以下算法如何为Matlab实现


paincupid
2009-04-09, 16:23
设N1(0 0)N2(0,D1)N3(D1 0)N4(D1 D1) %D1可假设为100,不知道不假设可不可以
设一个未知点(x,y)
如果未知点到这四个点的距离相等,则输出(x,y)的坐标为 (D1/2,D1/2)
如果未知点到N1的距离比到N2N3N4的距离近,则未知点在靠近N1的四分之一区域,即AB区域,则输出未知点的坐标为:这四分之一区域的中心;如果未知点到N2的距离小于未知点到N4的距离,而在剩下的八分之一区域,即B区。则未知点的坐标输出八分之一的区域的中心


请问:如上算法怎么用Matlab实现?不胜感激!!!thanks

silas_xue
2009-04-10, 11:24
lz 只是我的个人想法 仅供参考
可以写一个函数 输入参数为x,y,D1,输出为x_out,y_out。我想你还是需要定义D1的,否则区域的中心怎么算呢,即这个区域是无穷大的,中心坐标无法计算的,另外,八分之一的中心,你指的是内心、外心、形心...,不知道我对你所说的区域中心的理解是否正确。
其实附件中的图提示了很多的信息,你只要计算斜率即可。
即建立以你所述的(D1/2,D1/2)为原点的直角坐标系,以原点(D1/2,D1/2)为初始点、指向(x,y)的向量A,计算他与X轴正方向的夹角。
pseudo:
if (x,y) = (D1/2,D1/2)
output (D1/2,D1/2)
else if cos(45 degree)>(y-D1/2)/(x-D1/2) >0
output center via calculation
else if (y-D1/2)/(x-D1/2) =cos(45 degree)
output center via calculation
......
end if

Thx for reading.
PS:若还算满意,直接点击“Thanks”,再次登陆时亦便于查看回答是否真的帮到你了。

yhcode
2009-04-10, 13:05
楼上的方法挺好的,呵呵!我也这个思路,算法效率算是较高了

paincupid
2009-04-18, 10:41
lz 只是我的个人想法 仅供参考
可以写一个函数 输入参数为x,y,D1,输出为x_out,y_out。我想你还是需要定义D1的,否则区域的中心怎么算呢,即这个区域是无穷大的,中心坐标无法计算的,另外,八分之一的中心,你指的是内心、外心、形心...,不知道我对你所说的区域中心的理解是否正确。
其实附件中的图提示了很多的信息,你只要计算斜率即可。
即建立以你所述的(D1/2,D1/2)为原点的直角坐标系,以原点(D1/2,D1/2)为初始点、指向(x,y)的向量A,计算他与X轴正方向的夹角。
pseudo:
if (x,y) = (D1/2,D1/2)
output (D1/2,D1/2)
else if cos(45 degree)>(y-D1/2)/(x-D1/2) >0
output center via calculation
else if (y-D1/2)/(x-D1/2) =cos(45 degree)
output center via calculation
......
end if

Thx for reading.
PS:若还算满意,直接点击“Thanks”,再次登陆时亦便于查看回答是否真的帮到你了。

可是你只划分了AB区域,剩下的6个三角形并没有区分开来得到啊,而你只区分了两个大的三角形。我想做的是区分8个三角形区域
不过仍然感谢!