用正弦和余弦画一个有角度的正方形


这是我第一次在论坛上发帖。但我想我会跳进去问。。我正在画一个有x,y,宽度,高度和角度的矩形。我不想创建图形2D对象并使用变换。我认为这是一种效率低下的方法。我试图用for循环迭代到正方形的宽度,在每次迭代时都在正方形的高度画线,通过旋转来画一个正方形。我对trig的理解真的很欠缺,所以…我现在的代码画了一个时髦的三角形。如果还有这样的问题有答案,对重复的问题表示抱歉。如果你有任何关于我的编码的指针,我会喜欢一些更正或指针。

/编辑:很抱歉没有问题。我需要知道如何使用正弦和余弦绘制正方形或矩形,旋转中心位于正方形或矩形的左上角。通过使用具有角度的sin和cos来获得坐标(x1,y1),然后使用具有角度加90度的sin函数和cos函数来获得(x2,y2)的坐标。使用计数器变量从左到右绘制从上到下随角度变化的线。

for (int s = 0; s < objWidth; s++){
int x1 = (int)(s*Math.cos(Math.toRadians(objAngle)));
int y1 = (int)(s*Math.sin(Math.toRadians(objAngle)));
int x2 = (int)((objWidth-s)*Math.cos(Math.toRadians(objAngle+90)));
int y2 = (int)((objHeight+s)*Math.sin(Math.toRadians(objAngle+90)));
b.setColor(new Color((int)gArray[s]));
b.drawLine(objX+x1, objY+y1, objX+x2, objY+y2);
}

它被称为旋转矩阵。如果您的直线在旋转前具有以下坐标:

第1行:(0,0)-(0,高度)

第2行:(1,0)-(1,高度)

线宽:(宽,0)-(宽,高)

然后应用旋转矩阵变换将帮助您:

for (int s = 0; s < objWidth; s++){
int x1 = cos(angle)*s
int y1 = sin(angle)*s
int x2 = s * cos(angle) - objHeight * sin(angle)
int y2 = s * sin(angle) + objHeight * cos(angle) 
//the rest of code
}

希望我没有犯错误。

你的意思是像"菱形"吗?http://en.wikipedia.org/wiki/Rhombus(可以说只是站着)

如果是这样,您只需绘制四条线,水平线在x上的差异为xdiff=height*tan(objAngle)。

这样,你的菱形将由点作为的线组成

p1 = (objX,objY) (lower left corner)
p2 = (objX+xdiff,objY+height) (upper left corner)
p3 = (objX+xdiff+width,objY+height) (upper right corner)
p4 = (objX+xdiff+width,objY) (lower right corner)

你会画出从p1到p2到p3到p4的线,然后再回到p1。

或者你有没有想过其他形状?

相关内容

  • 没有找到相关文章

最新更新