📄 geowin_mink.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 + -