19 float Inf=3.4*pow(10,38);
21 线(
float k,
float b):
斜率(k),
截距(b){
24 矩阵* p1=(*(两个点))[
"0,:"];
25 矩阵* p2=(*(两个点))[
"1,:"];
27 if(pd[0]!=0 and pd[1]/pd[0]<
Inf){
29 截距=(*p1)[1]-(*p1)[0]*
斜率;
56 }
else if(线1.
斜率==线2.
斜率){
73 交点=
new 矩阵(1,2,(
float)0);
80 cout<<
"斜率:"<<line.
斜率<<
"截距:"<<line.
截距<<endl;
84 assert(矩阵1.
w==2 and 矩阵1.
h==1);
85 assert(矩阵2.
w==2 and 矩阵2.
h==1);
86 return 矩阵1[0]*矩阵2[1]-矩阵1[1]*矩阵2[0];
95 矩阵 * 交点=
new 矩阵(1,2,(
float)0);
97 矩阵 交点暂存=线1.
求交点(线1,线2);
98 if(交点暂存[0]==
Inf and 交点暂存[1]==-
Inf){
109 int leftx = (*小大1)[0];
110 if(leftx<((*小大2)[0])){
113 int rightx = (*小大1)[2];
114 if(rightx<((*小大2)[2])){
118 for(
int i=leftx;i<leftx+1;i++){
122 交点暂存[1]=线1.
斜率*leftx+线1.
截距;
125 }
else if(线1.
斜率==
Inf){
130 int lowy = (*小大1)[1];
131 if(lowy<((*小大2)[1])){
134 int highty = (*小大1)[3];
135 if(highty<((*小大2)[3])){
139 for(
int i=lowy;i<lowy+1;i++){
149 if(交点暂存[0]==-
Inf and 交点暂存[1]==
Inf){
157 矩阵* 交点2=交点->
r_(交点,交点);
161 矩阵 点差1=线1的两个点-*(交点2);
171 float small_value=0.0000001;
172 if( (((*(点差[
"0,0"]))[0])*((*(点差[
"1,0"]))[0]))<=small_value and (((*(点差[
"0,1"]))[0])*((*(点差[
"1,1"]))[0]))<=small_value and (((*(点差1[
"0,0"]))[0])*((*(点差1[
"1,0"]))[0]))<=small_value and (((*(点差1[
"0,1"]))[0])*((*(点差1[
"1,1"]))[0]))<=small_value){
173 for(
int i=0;i<2;i++){
178 if(
向量叉乘(*(点差[
"0,:"]),*(点差1[ss.str()]))<=0){
180 线1的两个点.
data[i*2+0]=(*(交点))[0];
181 线1的两个点.
data[i*2+1]=(*(交点))[1];
基本的矩阵计算类,用于完成各种矩阵初始化、最大最小、取值、加减乘除、精度设置等矩阵计算
void 精度(int n=5)
设置矩阵内的数据精度,小数点后保留5位
矩阵 * r_(矩阵 *矩阵1, 矩阵 *矩阵2)
按行合并
矩阵 * minmax(void)
求矩阵中所有元素的最大值,最小值
矩阵 * 线段交点(矩阵 &线1的两个点, 矩阵 &线2的两个点, float *被替换的序号)
friend ostream & operator<<(ostream &out, 线 &line)
float 向量叉乘(矩阵 矩阵1, 矩阵 矩阵2)