画图程序升级版Draw_v1

//  https://github.com/orocos/orocos_kinematics_dynamics/blob/master/orocos_kdl/src/frames.hpp
//  Vector2 defination

#include <iostream>
#include <cstring>
#include<string>
#include <math.h>
#include <vector>
#include <stdlib.h>
#include <frames.hpp>
using namespace std;
using namespace KDL;
#define PI 3.1415926

class Point    //二维点class
{
    public:
    Vector2 point;//二维点
    string name;
    Point(Vector2 v,string s){point=v;name=s;};
    Point(Vector2 v){point=v;};
    Point(double x,double y){point=Vector2(x,y);}
    Point(){};
    void move_p(double x,double y);//平移算子
    void rota_p(double an);//旋转算子
};
void Point::move_p(double x,double y){point+=Vector2(x,y);}
void Point::rota_p(double an){
    Rotation2 rot(-an/180*PI);
    point=rot.Inverse(point);
} //class defination finished;   

ostream&
operator << (ostream& os, const Point& X)
{
  return os << ‘(‘ << X.point.x()<< ‘,‘ << X.point.y()<< ‘)‘;
}
//重载运算符           

class Shape   //由点构成的二维图形class
{
    public:
    string name;//名称
    int n;        //顶点数
    vector<Point> points;//顶点容器
    Shape(string s){name=s;}
    Shape(){}
    void getpoint(Point p){points.push_back(p);}
    void move_s(double x,double y){for(int i=0;i<points.size();i++)points[i].move_p(x,y);}
    void rota_s(double an){for(int j=0;j<points.size();j++)points[j].rota_p(an);}
    void show(void){cout<<"图形"<<name<<"里面有"<<points.size()<<"个点"<<endl;}
    void showpoints(void){for(int i=0;i<points.size();i++)cout<<points[i]<<‘ ‘;cout<<endl;}
};

Vector2 get(string str){
    double x,y;int i,j;
    i=str.find(‘,‘,1);j=str.find(‘)‘,1);
    string X=str.substr(1,i-1),Y=str.substr(i+1,j-i);
    x=atof(X.c_str());y=atof(Y.c_str());//str2char2double
    return Vector2(x,y);
}
//从字符串(x,y)中获得点坐标 ,返回一个矢量 

void test_class(void){
        Point p(3,2),p1(2,3),p2(4,5);
     Shape s1("mine");
     s1.getpoint(p);
     s1.getpoint(p1);
     s1.getpoint(p2);

    string s="(0.2,1)";
    cout<<get(s).x()<<‘ ‘<<get(s).y()<<endl;

     cout<<"图形"<<s1.name<<"里面有"<<s1.points.size()<<"个点"<<endl;
     vector<Shape> volume(0);//图形容器
     volume.push_back(s1);

     cout<<"当前有"<<volume.size()<<"个图形"<<endl;
     s1.move_s(1,2);
     for(int i=0;i<s1.points.size();i++)cout<<s1.points[i]<<endl;
}
//测试基本类的定义及对其操作的有效性 

int main(){
 //   test_class();
  vector<Shape> volume;//图形容器 

  //开始任务循环
while(1){

    string com;
    vector<string> info(0);//存放keywords(create/operate/status),name,data
    getline(cin,com);//输入命令行
    int start=0,end=0;
while(start!=string::npos&&start!=com.size()){
    start=com.find_first_not_of(‘ ‘,start);
        end=com.find_first_of(‘ ‘,start);
    if(end==string::npos){end=com.size();}
        info.push_back(com.substr(start,end-start));
        start=end;
}

if(info[0]=="create")
{
    Shape s(info[1]);
    for(int i=0;i<info.size()-2;i++)s.getpoint(Point(get(info[i+2])));
    volume.push_back(s);
//    s.show();
}
else{
    if(info[0]=="operate"){
        if(info[1]=="move"){
            int j=0;for(int i=0;i<volume.size();i++){if(volume[i].name==info[2])j=i;}
            if(j>=volume.size())cout<<"不存在该图形,请查询volume状态!"<<endl;else{
                volume[j].move_s(get(info[3]).x(),get(info[3]).y());
                cout<<"对"<<volume[j].name<<"做了平移操作" <<"  ";cout<<"新的顶点:"<<"   "; volume[j].showpoints();
            }
        }
        else{
            if(info[1]=="rotate"){
              int j=0;for(int i=0;i<volume.size();i++){if(volume[i].name==info[2])j=i;}
              if(j>=volume.size())cout<<"不存在该图形,请查询volume状态!"<<endl;else{
                volume[j].rota_s(atof(info[3].c_str()));}
                cout<<"对"<<volume[j].name<<"做了旋转操作" <<"  ";cout<<"新的顶点:"<<"   ";volume[j].showpoints();
            }
            else cout<<"操作指令错误!"<<endl;
        }
    }
    else{
    if(info[0]=="status"){cout<<"当前volume里面有"<<volume.size()<<"个图形"<<"    ";
    for(int i=0;i<volume.size();i++){cout<<volume[i].name<<‘ ‘;}cout<<endl;
    }
    else cout<<"command error!!!"<<endl;
    }
}

}//任务循环结束 

    return 0;
}

有一点小bug还需要修改。。。。基本功能已经修改好了

时间: 2024-10-12 13:25:56

画图程序升级版Draw_v1的相关文章

贪吃蛇—C—基于easyx图形库(1):基本控制函数 实现 画图程序

自从学了c语言,就一直想做个游戏,今天将之付之行动,第一次写的特别烂,各种bug:就不贴了.今天网上看了好几个贪吃蛇,重新写了一次,做出来的效果还可以. 下面是详细的构建过程,本节因为时间限制,先贴出比较重要的控制函数实现,并用它做一个很简单很简单很有趣的画图程序. 首先,要对贪吃蛇的结构有一个大概的了解:要有一个控制系统控制蛇上下左右移动,而且不能往反方向移动:要有食物产生系统,食物出现位置随机:吃到食物后蛇要变长:要有死亡判定系统...... 总结起来,就是这样: 我写的这个结构有点乱,不过

MFC画图程序解析笔记一

这是 //if not define的简写,是宏定义的一种,它可以根据是否已经定义了一个变量来进行分支选择,一般用于调试等等.实际上确切的说这应该是预处理功能中三种(宏定义,文件包含和条件编译)中的一种----条件编译. 目录 1定义 2内容 3作用 4形式 1定义编辑 #define x ... #endif C语言在对程序进行编译时,会先根据预处理命令进行"预处理".C语言编译系统包括预处理,编译和链接等部分. #ifndef x //先测试x是否被宏定义过 #define x 程

java画图程序_图片用字母画出来_源码发布_版本二

在上一个版本:java画图程序_图片用字母画出来_源码发布 基础上,增加了图片同比例缩放,使得大像素图片可以很好地显示画在Notepad++中. 项目结构: 运行效果1: 原图:http://images.cnblogs.com/cnblogs_com/hongten/356471/o_imagehandler_result1.png 运行效果2: 原图:http://images.cnblogs.com/cnblogs_com/hongten/356471/o_imagehandler_res

NET简单的一个画图程序

using System; using System.Drawing; //HttpUtility.UrlEncode /// <summary> ///Curve 的摘要说明 /// </summary> public class Curve { public Curve() { // //TODO: 在此处添加构造函数逻辑 // } /*******************************************************属性设置*************

java画图程序_图片用字母画出来_源码发布

在之前写了一篇blog:java画图程序_图片用字母画出来 主要是把一些调试的截图发布出来,现在程序调试我认为可以了(当然,你如果还想调试的话,也可以下载源码自己调试). 就把源码发布出来. 项目结构: 资源文件: 原图:http://images.cnblogs.com/cnblogs_com/hongten/356471/o_imagehandler_resource.png 运行效果: 原图:http://images.cnblogs.com/cnblogs_com/hongten/356

写给笨蛋徒弟的学习手册(2)——简单的画图程序(1)

简单的一个C#画图程序,实现画直线.圆.矩形.多边形以及橡皮擦的功能,可以自定义画笔颜色.线宽和橡皮擦大小. 通过这个程序,给你讲C#的一些基础知识,包括接口.继承.属性.如何引用命名空间和一点点的事件. 在这个程序中用到了C#自带的类库System.Drawing. 首先,先看一下最终的成果. ---------------------------- 假装有图 ---------------------------- 记得我告诉你的三个步骤吗? 1.首先整体思考,画图的话我们至少需要三方面,画

贪吃蛇—C—基于easyx图形库(2):从画图程序到贪吃蛇【自带穿墙术】

上节我们用方向控制函数写了个小画图程序,它虽然简单好玩,但我们不应该止步于此.革命尚未成功,同志还需努力. 先复习一下贪吃蛇的结构: 开始实现之前,我们先理清一下思路.和前面画图程序不同,贪吃蛇可以有很多节,可以用一个足够大的结构体数组来储存它. 还需要一个食物坐标.定义如下: typedef struct Position //坐标结构 { int x; int y; }Pos; Pos array; //移动方向向量 Pos snake[300000] = {}; //蛇的结构体数组,谁能够

java画图程序_图片用字母画出来

最近在研究怎样将图片用字母在文本编辑工具中“画”出来. 你看了这个可能还不知道我想说什么? 我想直接上图,大家一定就知道了 第一张:小猫 原图:http://www.cnblogs.com/hongten/gallery/image/143365.html 第二张:林允儿 原图:http://images.cnblogs.com/cnblogs_com/hongten/356471/o_star.png 第三张:郭静 原图:http://www.cnblogs.com/hongten/galle

利用C语言编辑画图程序的实现方法

不知道大家在进行开发县级电网调度自动化系统的时候,是否都会遇到一个问题就是:要绘制一个电力系统一次接线图.大家都应该知道其实电力系统的一次接线图是较为复杂的,如果想要使用一般的编程方法来进行绘制的话,基本上就是行不通的.那么我们应该怎样才可以更加的高效直接呢?今天小编就会给大家介绍一个方法,那就是:利用C语言编辑画图程序的实现方法.希望这篇教程对于大家有所帮助. 一.实现方法 在教程开始之前,小编先为大家介绍一下在编程程序里面早已定义了几个特殊按钮.为什么小编要为大家介绍这几个特殊按钮呢?那是因