- 论坛徽章:
- 2
|
本帖最后由 OwnWaterloo 于 2011-10-24 22:34 编辑
标题
懂的同学应该明白,标题既想切题,又想不剧透,真心不好取…… 有什么建议么?
语言
给出一些代码既可以让题目表述更准确,又可以避免一些不必要的分歧,使讨论更集中。
既然这里是C/C++板块,自然用C描述比较合适。 但讨论不一定局限于C/C++。
不是都在追求所谓的语言只是工具么?
背景
与图形相关的程序的一些片段,不妨设
点定义如下:
- typedef struct {
- int x,y;
- } point;
复制代码 目前程序需要处理圆形与矩形。将来可能会增加更多的需要处理的图形。
定义如下:
- typedef struct {
- point center;
- double radius;
- } circle;
- typedef struct {
- int top,bottom,left,right;
- } rect;
复制代码 两点间距离以及圆形与矩形的中心计算已经实现:
- double distance(point p,point q);
- point center_of_circle(circle const* c) { return c->center; }
- point center_of_rect(rect const* r)
- {
- point p;
- p.x = (r->left + r->right)/2;
- p.y = (r->top + r->bottom)/2;
- return p;
- }
复制代码 问题1
在思考以下问题的同时请考虑软件演化时可能会需要处理更多的图形。
1.1. 设计一个函数R: double R(? x);
计算图形x的中心到原点的距离
1.2. 设计一个函数D: double D(? x,? y);
计算图形x,y中心之间的距离
1.3. 设计一个函数P: double P(? x,? y,? z);
计算图形x,y,z的中心构成的三角形(假设输入保证构成三角形)的周长
====== ====== 分割线:两个新增问题 ====== ======
原准备另开一贴的, 不过貌似这贴也不挤, 就放这了。
问题2: 设计一个函数 double distance(? x,? y); 求两图形上最近两点之间的距离
例:
若两圆相切或相交,则最近两点(可能存在多对)间距离为0。
若两圆相离,则最近两点是连接两圆心的线段与两圆的的两个交点之间的距离。
- double distance_of_circle(circle const* a,circle const* b)
- {
- double d = distance(a->center,b->center);
- double s = a->radius + b->radius;
- return d>s? d-s: 0;
- }
复制代码 同样,还有矩形与矩形、圆形与矩形的距离计算
- double distance_of_rect(rect const* a,rect const* b);
- double distance_of_circle_rect(circle const* c,rect const* r);
复制代码 问题3: 设计一个函数 double intersection(? x,? y,? z); 求三图形交集的面积。 |
|