C 中线的图形交点
我有作业。
作业是:有 3 条线,它们的末尾都是正方形。 首先程序必须查看一个圆,因为圆的线是相互切割的。 (换句话说:取3条线的交点)。 其次,程序必须改变背景。每条线的两侧都用一种颜色定义背景。以及如何旋转线条,以及它们如何改变背景颜色。 有 3 条线和 6 种背景颜色。背景颜色的边框沿着线条。
编程环境是DevC++(我们必须使用c++控制台应用程序,但在课程中我们不是用c++编码,只是用c...)
我尝试过实现线相交,但效果不太好 出色地。 我不知道,如何实现彩色背景变化。
它需要什么样的知识?
我想知道是否有人可以建议对我来说一些:算法、网页、教程、源代码,任何可以帮助我的东西。或者我的英文作业的名称是什么(谷歌搜索) 因为我不认为,我的解决方案是准备作业的最佳方法(也许不会成功)
这里是我到目前为止所做的代码(但它并不完美。线的交集并不完美。这不是一个漂亮的解决方案,抱歉我不是专业的 C 程序员):
- PONT =观点,点
- PONTH = 点聚合
- atir = 重写
- metszilleszt = 交叉点拟合
- szakasz = 截面、阶段...(英语-匈牙利语中有太多)或排 :-D
- eger = 鼠标
- egérkezelés = 鼠标控制
balgomb = 左鼠标按钮
# 包含“graphics.h” # 包含
; #include ; 类型定义结构{ 浮点数 x1,x2,x3; } 庞特; 类型定义结构{ 双 x,y; }庞特; PONTH atir(PONT A){ 庞特C; C.x1=Ax; C.x2=Ay; C.x3=1; 返回C; } PONTH metszilleszt(PONTH A,PONTH B){ 庞特C; C.x1=(A.x2*B.x3)-(A.x3*B.x2); C.x2=-(A.x1*B.x3)+(A.x3*B.x1); C.x3=(A.x1*B.x2)-(A.x2*B.x1); 返回C; } int main() { //PONT szakasz[4]={100,50,300,200,30,130,140,170}; PONT szakasz[6]={100,50,300,200,30,130,140,170,30,70,210,40}; int ap; 整数gd,gm; int页=0; gd=VGA;gm=VGAMED; initgraph(&gd,&gm,""); 庞特A、B、C、D、E、F; PONTH tmp1,tmp2,tmp3,tmp4,tmp5,tmp6; PONT 蓬; 为了(;;){ 设置活动页面(页面); 清除设备(); A=atir(szakasz[0]); B=atir(szakasz[1]); C=atir(szakasz[2]); D=atir(szakasz[3]); E=atir(szakasz[4]); F=atir(szakasz[5]); tmp1=metszilleszt(A,B); tmp2=metszilleszt(C,D); tmp3=metszilleszt(E,F); tmp4=metszilleszt(tmp2,tmp1); tmp5=metszilleszt(tmp3,tmp1); tmp6=metszilleszt(tmp3,tmp2); pont.x=int (tmp3.x1/tmp3.x3); pont.y=int (tmp3.x2/tmp3.x3); //printf("%f %f\n",pont.x,pont.y); // 好的 if((((tmp4.x2/tmp4.x3)>=szakasz[0].y) && ((tmp4.x2/tmp4.x3)<=szakasz[1].y)) & & (((tmp4.x1/tmp4.x3)>=szakasz[0].x) && ((tmp4.x1/tmp4.x3)<=szakasz[1].x)) || (((tmp4.x2/tmp4.x3)>=szakasz[0].y) && ((tmp4.x2/tmp4.x3)<=szakasz[1].y)) && (((tmp4.x1/tmp4.x3)<=szakasz[0].x) && ((tmp4.x1/tmp4.x3)>=szakasz[1].x))) { 设置颜色(红色); fillellipse(int (tmp4.x1/tmp4.x3),int (tmp4.x2/tmp4.x3),5,5); } if((((tmp5.x2/tmp5.x3)>=szakasz[0].y) && ((tmp5.x2/tmp5.x3)<=szakasz[1].y)) & & (((tmp5.x1/tmp5.x3)>=szakasz[0].x) && ((tmp5.x1/tmp5.x3)<=szakasz[1].x)) || (((tmp5.x2/tmp5.x3)>=szakasz[0].y) && ((tmp5.x2/tmp5.x3)<=szakasz[1].y)) && (((tmp5.x1/tmp5.x3)<=szakasz[0].x) && ((tmp5.x1/tmp5.x3)>=szakasz[1].x))) { 设置颜色(红色); //fillellipse(int (tmp5.x1/tmp5.x3),int (tmp5.x2/tmp5.x3),5,5); fillellipse(int (tmp5.x1/tmp5.x3),int (tmp5.x2/tmp5.x3),5,5); } if((((tmp6.x2/tmp6.x3)>=szakasz[0].y) && ((tmp6.x2/tmp6.x3)<=szakasz[1].y)) & & (((tmp6.x1/tmp6.x3)>=szakasz[0].x) && ((tmp6.x1/tmp6.x3)<=szakasz[1].x)) || (((tmp6.x2/tmp6.x3)>=szakasz[0].y) && ((tmp6.x2/tmp6.x3)<=szakasz[1].y)) && (((tmp6.x1/tmp6.x3)<=szakasz[0].x) && ((tmp6.x1/tmp6.x3)>=szakasz[1].x))) { 设置颜色(红色); fillellipse(int (tmp6.x1/tmp6.x3),int (tmp6.x2/tmp6.x3),5,5); } //其他{ 设置颜色(红色); // fillellipse(int (tmp3.x1/tmp3.x3),int (tmp3.x2/tmp3.x3),5,5); } /* 埃格克泽勒斯 */ if (!balgomb) ap = getactivepoint((pont2d*)szakasz,6,6); if (ap >= 0 && balgomb) { szakasz[ap].x = egerx; szakasz[ap].y = 埃格里; } /* Egerkezeles vege */ 设置颜色(白色); line((int)szakasz[0].x,(int)szakasz[0].y,(int)szakasz[1].x,(int)szakasz[1].y); 矩形((int)szakasz[0].x,(int)szakasz[0].y,(int)szakasz[0].x+4,(int)szakasz[0].y+4); 矩形((int)szakasz[1].x,(int)szakasz[1].y,(int)szakasz[1].x+4,(int)szakasz[1].y+4); line((int)szakasz[2].x,(int)szakasz[2].y,(int)szakasz[3].x,(int)szakasz[3].y); 矩形((int)szakasz[2].x,(int)szakasz[2].y,(int)szakasz[2].x+4,(int)szakasz[2].y+4); 矩形((int)szakasz[3].x,(int)szakasz[3].y,(int)szakasz[3].x+4,(int)szakasz[3].y+4); line((int)szakasz[4].x,(int)szakasz[4].y,(int)szakasz[5].x,(int)szakasz[5].y); 矩形((int)szakasz[4].x,(int)szakasz[4].y,(int)szakasz[4].x+4,(int)szakasz[4].y+4); 矩形((int)szakasz[5].x,(int)szakasz[5].y,(int)szakasz[5].x+4,(int)szakasz[5].y+4); 设置视觉页面(页面); 页 = 1 页; if (kbhit()) 中断; } getch(); 关闭图(); 返回(0); }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
关于线的交点,你应该阅读 Loren 博客上 Matworks 的 Loren Shure 和 Lucio Cetto 的文章:
这是在 Matlab 中,但原则是相同的。
Regarding the intersections of lines, you should read the article of Loren Shure and Lucio Cetto from Matworks on Loren's blog:
It's in Matlab but the principles are the same.