一些板子&个人备忘
一些自己有时候会用的板子
两线段相交判断代码
struct Line {
double x1;
double y1;
double x2;
double y2;
};
bool intersection(const Line &l1, const Line &l2) {
// 快速排斥实验
if ((l1.x1 > l1.x2 ? l1.x1 : l1.x2) < (l2.x1 < l2.x2 ? l2.x1 : l2.x2) ||
(l1.y1 > l1.y2 ? l1.y1 : l1.y2) < (l2.y1 < l2.y2 ? l2.y1 : l2.y2) ||
(l2.x1 > l2.x2 ? l2.x1 : l2.x2) < (l1.x1 < l1.x2 ? l1.x1 : l1.x2) ||
(l2.y1 > l2.y2 ? l2.y1 : l2.y2) < (l1.y1 < l1.y2 ? l1.y1 : l1.y2)) {
return false;
}
// 跨立实验
if ((((l1.x1 - l2.x1) * (l2.y2 - l2.y1) - (l1.y1 - l2.y1) * (l2.x2 - l2.x1)) *
((l1.x2 - l2.x1) * (l2.y2 - l2.y1) - (l1.y2 - l2.y1) * (l2.x2 - l2.x1))) > 0 ||
(((l2.x1 - l1.x1) * (l1.y2 - l1.y1) - (l2.y1 - l1.y1) * (l1.x2 - l1.x1)) *
((l2.x2 - l1.x1) * (l1.y2 - l1.y1) - (l2.y2 - l1.y1) * (l1.x2 - l1.x1))) > 0) {
return false;
}
return true;
}验证日期合法性
bool isLegal(int _year, int _month, int _day) {
// 检测是否合法
// 初步大体判断
if (_year <= 0 || _month <= 0 || _month > 12 || _day <= 0 || _day > 31) {
return false;
}
// 按月判断
if (1 == _month || 3 == _month || 5 == _month || 7 == _month || 8 == _month || 10 == _month || 12 == _month) {
return true;
} else if (4 == _month || 6 == _month || 9 == _month || 11 == _month) {
if (_day > 30) {
return false;
} else {
return true;
}
} else {
if (((_year % 4 == 0) && (_year % 100 != 0)) || (_year % 400 == 0)) {
if (_day > 29) {
return false;
} else {
return true;
}
} else {
if (_day > 28) {
return false;
} else {
return true;
}
}
}
}
个人备忘
- 整行读入字符串,忽略空格分割
std::getline(std::cin, name);
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LykorisR的博客!
评论




