Mathematica程序计算两线段之间的最短距离(*输入四个点坐标*)(*将坐标输成7/2形式可以得到准确解,输成3.5只能得到有一定精确度的数值解.*)(*如果两线段分别为AB,CD,按照以下规则输入坐标:{xA,yA,xB,yB,xC,yC,xD,yD}或者{{xA,yA},{xB,yB},{xC,yC},{xD,yD}}或者两种混和输入,必须保证按照顺序输入*)zuobiao={{0,0},{13,9},{6,6},{0,8}};zuobiao=Partition[Flatten[zuobiao],2];(*下面进行坐标旋转,目的是让两条直线均不与坐标轴平行,省去以后很多分情况的麻烦,一劳永逸*)xuanzj={0,\[Pi]/6,\[Pi]/4};brr={};err={};juli={};frr={};chuizuf=.;For[i=1,i<=Length[xuanzj],i++,For[j=1,j<=Length[zuobiao],j++,brr=Append[brr,{zuobiao[[j]][[1]]*Cos[xuanzj[[i]]]+zuobiao[[j]][[2]]*Sin[xuanzj[[i]]],-zuobiao[[j]][[1]]*Sin[xuanzj[[i]]]+zuobiao[[j]][[2]]*Cos[xuanzj[[i]]]}];];If[brr[[1]][[1]]!=brr[[2]][[1]]&&brr[[3]][[1]]!=brr[[4]][[1]]&&brr[[1]][[2]]!=brr[[2]][[2]]&&brr[[3]][[2]]!=brr[[4]][[2]],\[Alpha]=-xuanzj[[i]];Break[],brr={}];];(*下面判断两直线是否平行*)pingxing=.;If[(zuobiao[[1]][[1]]-zuobiao[[2]][[1]])*(zuobiao[[3]][[2]]-zuobiao[[4]][[2]])==(zuobiao[[1]][[2]]-zuobiao[[2]][[2]])*(zuobiao[[3]][[1]]-zuobiao[[4]][[1]]),If[(zuobiao[[1]][[1]]-zuobiao[[3]][[1]])*(zuobiao[[3]][[2]]-zuobiao[[4]][[2]])==(zuobiao[[1]][[2]]-zuobiao[[3]][[2]])*(zuobiao[[3]][[1]]-zuobiao[[4]][[1]]),pingxing=2(*直线重合*),pingxing=1(*直线平行*)],pingxing=0(*直线相交*)];(*下面是两直线重合时,先判断两条线段是否有重合部分,再计算距离*)If[pingxing==2,drr=Transpose[brr];If[Partition[Sort[drr[[1]],Less],2]=={Sort[{drr[[1]][[1]],drr[[1]][[2]]},Less],Sort[{drr[[1]][[3]],drr[[1]][[4]]},Less]}||Partition[Sort[drr[[1]],Less],2]=={Sort[{drr[[1]][[3]],drr[[1]][[4]]},Less],Sort[{drr[[1]][[1]],drr[[1]][[2]]},Less]},juli=Simplify[Norm[{Sort[drr[[1]],Less][[2]]-Sort[drr[[1]],Less][[3]],Sort[drr[[2]],Less][[2]]-Sort[drr[[2]],Less][[3]]}]];frr={{{Sort[drr[[1]],Less][[2]],Sort[drr[[2]],Less][[2]]},{Sort[drr[[1]],Less][[3]],Sort[drr[[2]],Less][[3]]}}};Print["准确解"];Print[juli];Print["数值解"];Print[juli//N],Print["两线段有一部分重合,距离为0"]]](*下面是两直线相交时,先计...