7 ParkingSlot::ParkingSlot(Point p, double h, double W, double L) :
9 Point(p.x() + W * cos(h - M_PI / 2.0),
10 p.y() + W * sin(h - M_PI / 2.0)),
11 Point(p.x() + W * cos(h - M_PI / 2.0) + L * cos(h),
12 p.y() + W * sin(h - M_PI / 2.0) + L * sin(h)),
13 Point(p.x() + L * cos(h), p.y() + L * sin(h))}),
14 entry_(border_[0], border_[3]),
15 rear_(border_[0], border_[1]),
16 curb_(border_[1], border_[2]),
17 front_(border_[2], border_[3])
21 ParkingSlot::ParkingSlot(double lrx, double lry, double rrx, double rry,
22 double rfx, double rfy, double lfx, double lfy) :
23 border_({Point(lrx, lry), Point(rrx, rry),
24 Point(rfx, rfy), Point(lfx, lfy)}),
25 entry_(border_[0], border_[3]),
26 rear_(border_[0], border_[1]),
27 curb_(border_[1], border_[2]),
28 front_(border_[2], border_[3])
33 ParkingSlot::len() const
35 return this->entry_.len();
39 ParkingSlot::w() const
41 return this->rear_.len();
45 ParkingSlot::lfx() const
47 return this->border_[3].x();
51 ParkingSlot::lfy() const
53 return this->border_[3].y();
57 ParkingSlot::lrx() const
59 return this->border_[0].x();
63 ParkingSlot::lry() const
65 return this->border_[0].y();
69 ParkingSlot::rrx() const
71 return this->border_[1].x();
75 ParkingSlot::rry() const
77 return this->border_[1].y();
81 ParkingSlot::rfx() const
83 return this->border_[2].x();
87 ParkingSlot::rfy() const
89 return this->border_[2].y();
93 ParkingSlot::h() const
95 return atan2(this->lfy() - this->lry(), this->lfx() - this->lrx());
99 ParkingSlot::parallel() const
101 return this->entry_.len() > this->rear_.len();
105 ParkingSlot::right() const
107 return this->border_[1].on_right_side_of(this->entry_);
111 ParkingSlot::swap_side()
113 this->border_[1].rotate(this->border_[0], M_PI);
114 this->border_[2].rotate(this->border_[3], M_PI);
118 ParkingSlot::parked(BicycleCar const& c) const
120 auto b_len = sizeof(this->border_) / sizeof(this->border_[0]);
121 std::vector<Point> b(this->border_, this->border_ + b_len);
122 return c.lf().inside_of(b) && c.lr().inside_of(b)
123 && c.rr().inside_of(b) && c.rf().inside_of(b);
127 operator<<(std::ostream& o, ParkingSlot const& s)
130 o << s.border_[0] << ",";
131 o << s.border_[1] << ",";
132 o << s.border_[2] << ",";