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

xjasony 1年前 已收到2个回答 举报

nx206 幼苗

共回答了16个问题采纳率:93.8% 举报

基本解决了你的问题.
思路是这样的
首先生成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*')

1年前

5

龙弋 幼苗

共回答了3个问题 举报

呵呵 我找到了

1年前

2
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 18 q. 0.098 s. - webmaster@yulucn.com