![]() |
[求助]以下算法如何为Matlab实现
1 个附件
设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 |
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”,再次登陆时亦便于查看回答是否真的帮到你了。 |
楼上的方法挺好的,呵呵!我也这个思路,算法效率算是较高了
|
回复: [求助]以下算法如何为Matlab实现
[QUOTE=silas_xue;25660]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”,再次登陆时亦便于查看回答是否真的帮到你了。[/QUOTE] 可是你只划分了AB区域,剩下的6个三角形并没有区分开来得到啊,而你只区分了两个大的三角形。我想做的是区分8个三角形区域 不过仍然感谢! |
所有时间均为北京时间。现在的时间是 11:09。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.