⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 geowin_mink.c

📁 A Library of Efficient Data Types and Algorithms,封装了常用的ADT及其相关算法的软件包
💻 C
字号:
#include <LEDA/geowin.h>#include <LEDA/plane_alg.h>#include <LEDA/misc.h>#define POLYGON     rat_polygon#define GEN_POLYGON rat_gen_polygon#define SEGMENT     rat_segment#define TRIANGLE    rat_triangle#define POINT       rat_point#define VECTOR      rat_vector#define NB          rational/*#define POLYGON     polygon#define GEN_POLYGON gen_polygon#define SEGMENT     segment#define TRIANGLE    triangle#define POINT       point#define VECTOR      vector#define NB          double*/GeoWin* geow;window* win;void rat_segment_points(list<rat_point>&, rat_segment, int);void segment_points(list<point>&, segment, int);bool anim_val=false;void animation(window* w, const POLYGON& rpoly, const POLYGON& act, const GEN_POLYGON& gp ){ char* prect; win->start_buffering(); color cold = win->set_color(blue2);  win->clear(); (*win) << gp;  win->set_color(black); (*win) << act;  win->set_color(cold); win->stop_buffering(prect); list<SEGMENT> LSeg = gp.segments(); list<point> pos; list<point> act_pts; point piter;  SEGMENT iter; forall(iter,LSeg){  act_pts.clear();   segment_points(act_pts, iter.to_float(), 5);  forall(piter, act_pts) pos.append(piter); } win->put_pixrect(prect);  polygon rpoly_fl = rpoly.to_float(); list<polygon> polys; list<point> ref_pt; forall(piter,pos) {   polys.append(rpoly_fl.translate(piter.xcoord(),piter.ycoord()));   ref_pt.append(piter); } polygon poly_iter;  list_item it = ref_pt.first();   win->start_buffering(); forall(poly_iter,polys){  win->put_pixrect(prect);  (*win) << ref_pt[it];   it=ref_pt.cyclic_succ(it);  (*win) << poly_iter;  win->flush_buffer();  leda_wait(0.03); } win->stop_buffering(prect); }static void ms(const list<POLYGON>& Lin, list<GEN_POLYGON>& Lout){   Lout.clear();  if( Lin.length() < 2 ) return;  POLYGON p1=Lin.head();  // the robot ...  POLYGON pact;  list_item it = Lin.succ(Lin.first());      for(;it != NULL; it = Lin.succ(it)){   pact = Lin[it];   GEN_POLYGON result = MINKOWSKI_DIFF(GEN_POLYGON(pact),p1);      Lout.append(result);   if (anim_val) animation(win, p1, pact, result);  }}int main(){  GeoWin GW("Minkowski differences of polygons");    GW.set_show_grid(true);  GW.set_grid_style(line_grid);  GW.set_grid_dist(10);    geow = &GW;  win = &GW.get_window();    list<POLYGON> L;  geo_scene polygon_scene = geowin_new_scene(GW, L);   GW.set_fill_color(polygon_scene, invisible);  GW.set_visible(polygon_scene,true);  GW.set_name(polygon_scene, "Roboter and obstacles");  GW.set_z_order(polygon_scene,0);    geowin_update<list<POLYGON>, list<GEN_POLYGON> > up(ms);     geo_scene mink =  geowin_new_scene(GW, up, polygon_scene, "Minkowski difference");  GW.set_color(mink,blue);  //GW.set_fill_color(mink,invisible);  GW.set_fill_color(mink,blue2);  GW.set_visible(mink,true);  GW.set_z_order(mink,1);  GW.init_menu();  GW.get_window().bool_item(" Animation ?",anim_val);  GW.message("first object: roboter     following objects: obstacles");  GW.edit(polygon_scene);  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -