Matlab 如何确定点是否在三角形内
项目说明如下: 我从一个文件中取了3个坐标,画了一个三角形 我想画一个网格,如果网格点在三角形中,我想画一个黑色的圆,否则就是红色的圆 我用来检查点是否在三角形内的方法是,如果点(xco,yco)在三角形内,它与其他三个点形成的小三角形的面积之和等于三角形的面积 所以我的if语句是如果总面积=三角形的面积->绘制黑圈,否则绘制红圈 问题是,即使某些点使总面积等于三角形打印区域的面积,黑色圆圈未打印,而红色圆圈已打印 它看起来是随机的,我无法解决这个简单的问题 你能帮我画点吗Matlab 如何确定点是否在三角形内,matlab,Matlab,项目说明如下: 我从一个文件中取了3个坐标,画了一个三角形 我想画一个网格,如果网格点在三角形中,我想画一个黑色的圆,否则就是红色的圆 我用来检查点是否在三角形内的方法是,如果点(xco,yco)在三角形内,它与其他三个点形成的小三角形的面积之和等于三角形的面积 所以我的if语句是如果总面积=三角形的面积->绘制黑圈,否则绘制红圈 问题是,即使某些点使总面积等于三角形打印区域的面积,黑色圆圈未打印,而红色圆圈已打印 它看起来是随机的,我无法解决这个简单的问题 你能帮我画点吗 figure()
figure()
% Loading the data from .mat file
A = load('triangle_a.mat','pt1');
B = load('triangle_a.mat','pt2');
C = load('triangle_a.mat','pt3');
% Assigning values of array from .mat into each variable
x1 = A.pt1(1,1);
y1 = A.pt1(1,2);
x2 = B.pt2(1,1);
y2 = B.pt2(1,2);
x3 = C.pt3(1,1);
y3 = C.pt3(1,2);
% Drawing coordinates of a triangle on a grid
plot(x1, y1,'or');
hold on
plot(x2, y2,'or');
hold on
plot(x3, y3,'or');
hold on
% Joining three coordinates to make a triangle
plot ([x1,x2],[y1,y2],'-b');
plot ([x1,x3],[y1,y3],'-b');
plot ([x3,x2],[y3,y2],'-b');
xmin = A_coor(1,1);
xmax = B_coor(1,1);
ymin = A_coor(1,2);
ymax = C_coor(1,2);
xgrid = xmin-1:0.5:xmax+1;
ygrid = ymin-1:0.5:ymax+1;
tri_x = [x1 x2 x3];
tri_y = [y1 y2 y3];
area = polyarea(tri_x,tri_y);
% Making a grid
for x = 1:1:numel(xgrid)
for y = 1:1:numel(ygrid)
xco = xgrid(1,x);
yco = ygrid(1,y);
aa = [xco, x2, x3];
bb = [yco, y2, y3];
cc = [x1, xco, x3];
dd = [y1, yco, y3];
ee = [x1,x2,xco];
ff = [y1,y2,yco];
area1 = polyarea(aa,bb);
area2 = polyarea(cc,dd);
area3 = polyarea(ee,ff);
totarea = area1 + area2 + area3;
if totarea == area
plot(xco,yco,'ok');
else
plot(xco,yco,'.r');
end
end
end
我的代码在我更改了if语句的条件以生成网格部分后工作。(感谢Hoki的建议)
以前
if totarea == area
之后
如果abs(area-totarea)您可以使用MATLAB函数确定点是否位于任意多边形内。我怀疑这与数值公差有关,特别是来自函数polyarea
对于非常接近三角形边的点。可以尝试不使用纯粹的相等,但查找给定的公差是否仍适用于您的情况(如if abs(面积与面积)它确实有效!!!非常感谢!很高兴它对您有效。也许您可以在这里的答案中解释并展示您实施的有效解决方案。这样,与您有相同问题的人将得到更直观的答案;-)
if abs(area-totarea)<0.002;)