cure算法java代码 java 算法( 六 )


//当前expif(opCnt0){//生成下级表达式for(int i=0; i4; ++i)GenerateExpression(opCnt-1, preExp + ops[i]);}else //opCnt=0{//计算表达式的值,如果为0则输出if(Eval(preExp) == 0) coutpreExp"=0"endl;}} //计算表达式的值 , 一般来说需要写一个表达式翻译器,但是考虑到题目特殊,可以优化//1、操作数只有1,所以就不用分析操作数了//2、运算符只有+-*/所以就不用考虑括号问题,只需要考虑四则运算优先级//3、考虑*/的操作数 , 有两个来源,一个是1,一个是其他*/操作数的结果,//用归纳法可以容易的知道,*/的结果一定是1,所以原则上表达式中*1和/1//对结果没有任何影响(我爱阿贝尔群!)//4、由于3、证明了*/对结果没有影响 , 所以就不用考虑运算优先级问题了,哦也!int Eval(string curExp){int result = 0;if(curExp.length()==0 || curExp.length()%2==0) throw new exception("Wrong exception format.");
//空表达式,偶数字符表达式都是非法的if(curExp[0]=='1') result = 1;else new exception("Wrong exception format.");
//表达式不是1()1()1...格式的for(int i=1; i(int)curExp.length(); i+=2){string curOp = curExp.substr(i,2);if(curOp == "+1") result++;
//+1else if(curOp == "-1" ) result--;
//-1//*1和/1对表达式结果没有影响}return result;} int main(){//寻找1()1()1=0的表达式并输出GenerateExpression(2,"1");system("PAUSE");return 0;}
有哪位好心人有cad二次开发的实例,用vb货c语言编的都可以,不用太复杂简单点的就可以,希望好心人能帮忙觉得还是应该写写CAD二次开发的相关一些内容,原因是最近搜网上对于这种实例原理分享的内容忒少了,毫无头绪 , 因此进行一个简单的分享,希望和我一样的寻求如何对CAD进行二次开发的,亦或是不知道怎么做的,可以参考一下一些拙见 。
最近由于公司业务逐渐的增多,而同事与cad相关的工作,有不少是重复性工作,而软件往往就是为了减少重复性的工作,增加创新性的工作,提高工作效率,减少差错率等~~说这么一句话,在CAD基础上开发插件 , 解决这些问题 。。。只好硬着头皮上了
个人是选择C#进行CAD的二次开发,原因使用起来相对来说容易上手 , 首先C#是高级语言,面向对象,本身自己从Java出身;C#还有一个优势,就是依然可以调用C++库 , 可以很好的托管一些现有的功能,由于自己在C#和cad的使用完全是菜鸟,因此在网上找了两本现有可以找到的书《NET_CAD深居浅出AutoCAD二次开发 C#版》
和《深入浅出cad二次开发》 , 废话不说了 , 下面说一下代码实现倒圆角的原理,由于涉及到软件著作权 , 就不贴代码了
首先倒圆角从命令的使用时,选中命令,然后选择两条线 , 在给定的半径下进行画圆弧 。介于以上的命令使用方式,因此开始考虑使用C#所支持sendstringtoexecute来调用fillet命令,如
sendstringtoexecute("._fillet \n r\n 0.7\n");
当写到这个命令时间,必须要指定两条线才能回画出 , 然后进行了仿照Lisp语言的ObjectID的获取,Handle的获取,HighLight的设置调用,均无效~~彻底失望 , 想了一年愣是没想出来怎么才能成功的调用语言,也可能是由于自己对于二次开发的经常不足吧,可能还不熟悉正确的调用方法 。
因此进行了转换角度思考,C#既然进行arx等类库的封装 , 那么可以理解,一些基本的常用的功能都会实现,不用进行托管c++,并且如果调用命令的话,往往比较难以控制,因此就用数学算法的形式进行代码的开发 。。。
两条线 l1和l2 可以获取两线的交点p,需要画的倒圆角的半径已知r , 根据CAD的方法,Point3d中可以算出此两条线的夹角,因此可以使用数学函数sin,可以求出p点和圆心点的距离 , 进而根据Cure中的方法可以算出圆弧的圆心o,因此可以按照圆心o和半径r做圆 , 这样就会和l1、l2进行相切,这时间按照同样的思路可以获得两个切点,然后根据point2d的方法 , 获取切点和原型o的的角度,这样就可以获得起始角度和终点角度,加上o和半径r , 这样就可以画圆弧了 , 最后这个圆弧就是倒圆角 。

推荐阅读