2

这是我第一次在论坛上发帖。但我想我会跳进去问.. 我正在尝试用 x、y、宽度、高度和角度绘制一个矩形。我不想创建图形 2D 对象并使用变换。我认为这是一种低效的方法。我正在尝试使用 for 循环绘制一个带旋转的正方形以迭代到正方形宽度,在正方形高度处绘制每次迭代的线条。我对三角的理解真的很缺乏,所以......我当前的代码绘制了一个时髦的三角形。如果还有其他这样的问题,对重复的答案感到抱歉。如果您对我的编码有任何指示,我会喜欢一些更正或指示。

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

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);

}
4

2 回答 2

2

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

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

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

...

线宽:(width, 0) - (width, height)

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

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
}

希望我没有犯错。

于 2012-10-16T07:24:43.893 回答
0

你的意思是像“菱形”吗?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。

或者你有什么其他的想法?

于 2012-10-16T07:29:57.603 回答