matlab在20*20的区域里随机产生三个点,并以这三个点为顶点构成三角形,在此三角形区域里随机生成一点,

2个回答

  • 基本解决了你的问题.

    思路是这样的

    首先生成3*2个0~20的随机数,以此为坐标建立三角形(这里假设三个随机点共线的概率是0),然后随机生成要求节点P在该三角形中的面积坐标,最后通过求解方程组,求解节点P坐标.代码如下,其中x0,y0为要求解的P点坐标

    close all

    xy=20*rand(3,2);

    xy(4,:)=xy(1,:);

    figure

    axis([0,20,0,20])

    hold on

    plot(xy(:,1),xy(:,2));

    A=zeros(1,3); %三角形面积坐标,要保证三个坐标之和为1

    A(1)=rand();

    A(2)=rand()*(1-A(1));

    A(3)=1-A(1)-A(2);

    %由上述面积坐标建立方程组求解节点P

    x1=xy(1,1);x2=xy(2,1);x3=xy(3,1);

    y1=xy(1,2);y2=xy(2,2);y3=xy(3,2);

    s=sign((x2-x1)*(y3-y1)-(y2-y1)*(x3-x1));%原三角形的转向

    Area=s*((x2-x1)*(y3-y1)-(y2-y1)*(x3-x1));%原三角形面积

    %构造方程组左端项

    syms x0 y0 L1 L2 L3

    L1=s*((x2-x0)*(y3-y0)-(y2-y0)*(x3-x0));%三角形PJK面积

    L2=s*((x0-x1)*(y3-y1)-(y0-y1)*(x3-x1));%三角形PIK面积

    %%L3=s*((x2-x1)*(y0-y1)-(y2-y1)*(x0-x1));%三角形PIJ面积

    eq1=[char(L1),'=',num2str(Area*A(1))];

    eq2=[char(L2),'=',num2str(Area*A(2))];

    [x0,y0]=solve(eq1,eq2,'x0','y0');

    x0=double(x0);y0=double(y0);

    plot(x0,y0,'r*')