###実現したいこと
std::cout
に対するエラーが突然大量にでてきた。
左下の頂点を出すところだけでてきます。どう違うのか教えてください。
###問題点
エラーがとても大量にでてきたので一部だけ貼ります。
kadai31.cpp: In function 'int main()': kadai31.cpp:114:44: error: no match for 'operator<<' (operand types are 'std::basic_ostream<char>' and 'Point') 114 | std::cout<<"m<<rij.lower_left_corner; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~ | | | | std::basic_ostream<char> Point
###コード
C++
1//最小包囲長方形 2 3#include<iostream> 4#include<cmath> 5#include<vector> 6 7//x座標,y座標を表すクラス 8struct Point 9{ 10 double x; 11 double y; 12 13 //原点を中心に反時計回りにθだけ回転させるメンバ関数 14 void qij_rotate(double theta){ 15 double dx=x; //x座標が変わらないように置いておく 16 x=dx*cos(theta)-y*sin(theta); 17 y=dx*sin(theta)+y*cos(theta); //点(x,y)を原点を中心にθだけ回転させると(xcosθ-ysinθ,xsinθ+ycosθ)となる 18 } 19}; 20 21//長方形を表現するクラス 22struct Rectangle 23{ 24 Point lower_left_corner; //長方形の左下の頂点を表す 25 double width; //長方形の幅を表す 26 double height; //長方形の高さを表す 27 double angle; //長方形の傾いている角度を表す 28 29 //長方形を原点を中心に反時計回りにθだけ回転させるメンバ関数 30 void rotate(double theta) 31 { 32 Point d; 33 d.x=lower_left_corner.x; //x座標が変わらないように置いておく 34 lower_left_corner.x=d.x*cos(theta)-lower_left_corner.y*sin(theta); 35 lower_left_corner.y=d.x*sin(theta)+lower_left_corner.y*cos(theta); 36 angle+=theta; 37 } 38}; 39 40//点集合の包囲長方形を計算する関数 41Rectangle bounding_rectangle(std::vector<Point>& points) 42{ 43 int i,j; 44 int n=points.size(); 45 Point min,max; 46 min.x=points[0].x; 47 max.x=points[0].x; 48 min.y=points[0].y; 49 max.y=points[0].y; 50 std::vector<double> area; //面積の配列 51 std::vector<Rectangle> r; //長方形の配列 52 for(i=0;i<n-1;i++){ 53 for(j=i+1;j<n;j++){ 54 double qij=std::atan2(points[j].y-points[i].y,points[j].x-points[i].x); //x軸の正の方向と線分pipjのなす角度を計算する 55 points[j].qij_rotate(-qij); //pのすべての点を原点を中心に-qij回転させる 56 //軸平行な最小包囲長方形を求める 57 if(points[j].x<min.x){ 58 min.x=points[j].x; 59 } 60 if(points[j].x>max.x){ 61 max.x=points[j].x; 62 } 63 if(points[j].y<min.y){ 64 min.y=points[j].y; 65 } 66 if(points[j].y>max.y){ 67 max.y=points[j].y; 68 } 69 std::cout<<"min.x="<<min.x<<" max.x="<<max.x<<" min.y="<<min.y<<" max.y="<<max.y<<"\n"; 70 Rectangle rij; 71 rij.height=max.y-min.y; //高さ 72 std::cout<<"高さ"<<rij.height<<"\n"; 73 rij.width=max.x-min.x; //幅 74 std::cout<<"幅"<<rij.width<<"\n"; 75 r.push_back(rij); 76 r[i].rotate(qij); //長方形rijを原点を中心にqij回転させる 77 double areas=rij.height*rij.width; //rijの面積 78 std::cout<<"面積"<<areas<<"\n"; 79 area.push_back(areas); 80 } 81 } 82 double min_area=area[0]; 83 int ri; 84 for(i=0;i<n;i++){ 85 if(min_area>area[i]){ 86 min_area=area[i]; 87 ri=i; 88 } 89 } 90 std::cout<<"最小面積"<<min_area<<"\n"; 91 return r[ri]; 92 93} 94 95int main() 96{ 97 int n; //個数 98 int i; 99 std::cout<<"点の個数を入力してください(n>=3)\n"; 100 std::cin>>n; 101 102 std::vector<Point> pts; 103 pts.resize(n); 104 std::cout<<"点の座標を入力してください\n"; 105 for(Point& p:pts){ 106 std::cin>>p.x>>p.y; 107 } 108 109 Rectangle rij=bounding_rectangle(pts); 110 std::cout<<"最小包囲長方形の幅は"<<rij.width<<"高さは"<<rij.height<<"\n"; 111 std::cout<<"長方形の左下の頂点の座標は"<<rij.lower_left_corner<<"\n"; 112 std::cout<<"長方形の傾いている角度は"<<rij.angle<<"\n"; 113 114 return 0; 115 116 117}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/11 06:15