作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我收到以下几点作为输入:
Point A(200 ; 400)
Point B(400 ; 400)
Point C(400 ; 200)
Point D(600 ; 200)
Point E(700 ; 500)
Point F(500 ; 700)
Point G(200 ; 600)
最佳答案
如果您深入研究这是一个非常困难的问题。通过乘以常数来进行天真缩放是不可能的,因为这会改变形状, Angular 等。
为了放大和缩小多边形,最好的方法是使用沿垂直方向向内/向外移动边并随后修复连接点的方法。但是请注意这里的一些基本问题:
float angle;
float length;
int flag;
float x0,y0,x1,y1; // computed endpoints for rendering
angle
计算atan2(y1-y0,x1-x0)
,并且长度很明显sqrt((x1-x0)^2+(y1-y0)^2)
。该标志可以存储哪个值是最终的(测量值)。 line[i].x0=line[i-1].x1;
line[i].y0=line[i-1].y1;
line[i].x1=line[i].lengths*cos(line[i].angle);
line[i].y1=line[i].lengths*sin(line[i].angle);
x0,y0
将是多边形的原点。为了计算一条线,必须计算先前的线段,并且必须设置实际线的所有值。因此,请计算所有可能的行,并在无法计算更多行时停止。(0,0)
)。 x0,y0,x1,y1
关于c++ - 实现自动线段缩放算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61321674/
我是一名优秀的程序员,十分优秀!