【问题标题】:draw an angled square using sine and cosine使用正弦和余弦绘制斜角正方形
【发布时间】:2012-10-06 05:15:12
【问题描述】:

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

/Edit: 很抱歉没有提问。我需要知道如何使用正弦和余弦来绘制正方形或矩形,旋转中心在正方形或矩形的左上角。通过使用带角度的 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);

}

【问题讨论】:

  • 我想他只需要旋转矩形,但不知道为什么他的解决方案不起作用。
  • 啊一个轮换。我认为 OP 意味着某种倾斜的矩形。我猜,轮换确实更有意义。
  • @Andrew Hmm 我认为这个问题已经很清楚了(鉴于 OP 已经放弃了替代方法并希望自己做):“我如何画一个有角度的正方形?”只是“有角的正方形”需要解释。 :)

标签: java graphics drawing awt trigonometry


【解决方案1】:

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

第 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
}

希望我没有犯错。

【讨论】:

  • 这解决了我的轮换问题,非常感谢您花时间回答我的问题。我的正弦和余弦函数使用不当。我没有从 scos(angle) 中减去 heightsin(angle),也没有将 height(cos(angle) 添加到 y2。再次感谢。
【解决方案2】:

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

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

【讨论】:

  • 我认为我不需要那个,但看起来很有趣。感谢您花时间回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
  • 1970-01-01
  • 2017-10-06
  • 2013-04-05
  • 1970-01-01
相关资源
最近更新 更多