我有作业。
作业是:有 3 行,它们的末尾是方 block 。 首先 该程序必须查看一个圆圈,即线条相互切割。 (换句话说:取 3 条线的交点)。 其次,程序必须沿线更改背景。每条线的两侧用一种颜色定义背景。以及如何旋转线条,连同它们一起改变背景颜色。 有 3 行,和 6 种背景颜色。背景颜色的边框是沿线的。
编程环境是DevC++(我们必须使用c++控制台应用程序,但在类(class)中我们不是用c++编码,只是c...)
Youtube video about the exercise/homework
我试过实现线的交点,但效果不是很好。 而且我不知道,我怎样才能实现彩色背景变化。
需要什么样的知识?
如果有人可以向我建议一些:算法、网页、教程、源代码,任何可以帮助我的东西。或者我的作业的英文名称是什么(谷歌搜索) 因为我不认为,我的解决方案是准备作业的最佳方式(也许不会成功)
这是我到目前为止所做的代码(但它并不完美。线条的交集并不完美。这不是一个漂亮的解决方案,抱歉我不是专业的 C 程序员):
- PONT = 点,点
- PONTH = 点的聚合
- atir = 重写
- metszilleszt = 交点拟合
- szakasz = section, phase...(英语-匈牙利语中有太多)或 platoon :-D
- eger = 鼠标
- egérkezelés = 鼠标控制
balgomb = 鼠标左键
# include "graphics.h" # include <conio.h> #include <stdio.h> typedef struct { float x1,x2,x3; } PONTH; typedef struct { double x,y; }PONT; PONTH atir(PONT A){ PONTH C; C.x1=A.x; C.x2=A.y; C.x3=1; return C; } PONTH metszilleszt(PONTH A,PONTH B){ PONTH 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); return 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; int gd,gm; int page =0; gd=VGA;gm=VGAMED; initgraph(&gd,&gm,""); PONTH A,B,C,D,E,F; PONTH tmp1,tmp2,tmp3,tmp4,tmp5,tmp6; PONT pont; for(;;){ setactivepage(page); cleardevice(); 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); // good 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))) { setcolor(RED); 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))) { setcolor(RED); //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))) { setcolor(RED); fillellipse(int (tmp6.x1/tmp6.x3),int (tmp6.x2/tmp6.x3),5,5); } //else{ setcolor(RED); // fillellipse(int (tmp3.x1/tmp3.x3),int (tmp3.x2/tmp3.x3),5,5); } /* Egerkezeles */ if (!balgomb) ap = getactivepoint((pont2d*)szakasz,6,6); if (ap >= 0 && balgomb) { szakasz[ap].x = egerx; szakasz[ap].y = egery; } /* Egerkezeles vege */ setcolor(WHITE); line((int)szakasz[0].x,(int)szakasz[0].y,(int)szakasz[1].x,(int)szakasz[1].y); rectangle((int)szakasz[0].x,(int)szakasz[0].y, (int)szakasz[0].x+4, (int)szakasz[0].y+4); rectangle((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); rectangle((int)szakasz[2].x,(int)szakasz[2].y, (int)szakasz[2].x+4, (int)szakasz[2].y+4); rectangle((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); rectangle((int)szakasz[4].x,(int)szakasz[4].y, (int)szakasz[4].x+4, (int)szakasz[4].y+4); rectangle((int)szakasz[5].x,(int)szakasz[5].y, (int)szakasz[5].x+4, (int)szakasz[5].y+4); setvisualpage(page); page = 1-page; if (kbhit()) break; } getch(); closegraph(); return(0); }
最佳答案
关于c - C中直线的图形交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7715109/