java - 使用正弦和余弦绘制一个有角度的正方形

标签 java graphics drawing awt trigonometry

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

/编辑:抱歉没有提问。我需要知道如何使用正弦和余弦来绘制正方形或矩形,并以正方形或矩形的左上角为中心进行旋转。通过使用 sin 和 cos 函数加上角度来获取坐标 (x1,y1),然后使用 sin 和 cos 函数加上角度加上 90 度来获取坐标 (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);

}

最佳答案

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

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

希望我没有犯错误。

关于java - 使用正弦和余弦绘制一个有角度的正方形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12909040/

相关文章:

java - Eclipse插件: Show window with scrollable text

java - 如何重置计时器从 00 :00:00 each time i run my program over again? 开始

c# - 了解涉及 paint() 的小 C# 代码片段

c# - 画一条平行线

java - 如何将 .jar 上传到 AWS EC2 并重新启动运行它的 JVM?

java - 通过 Google Adwords API 获取特定 Adwords 报告可用的字段列表

java - BufferedImage 未作为图像返回

r - ggplot2 绘制 Kaplan-Meier 图时在生存数据框中找到空行

java - 绘制随机圆圈,将它们的坐标存储在数组中

math - 给定椭圆度的测量值,画一个椭圆