如何绘制斜矩形

zhftxj 2011-10-08 05:53:24
绘制斜矩形,并且能得到这个斜矩形的面积..

各位大侠,给个思路与做法...
在此谢谢
...全文
255 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhftxj 2011-10-13
  • 打赏
  • 举报
回复
这是平行四边行的算法吧....

要斜矩形
shine333 2011-10-13
  • 打赏
  • 举报
回复
j2me好久没用,不知道java2d的API能不能用,
参考j2dk里面java.awt.geom.AffineTransform.getShearInstance(double, double)
天空龙 2011-10-13
  • 打赏
  • 举报
回复
要我怎么说你,就几条数学计算公式,自己解决吧。
天空龙 2011-10-10
  • 打赏
  • 举报
回复
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;


public class DrawTool extends Canvas{

protected void paint(Graphics g) {
g.setColor(0x000000);
try {
drawPAR(10, 10, 40, 10, 30, 30, g);
System.out.println(this.getArea(10, 10, 40, 10, 30, 30));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}

/**
* 获取平行四边形面积
* @param x1 起始点的X坐标
* @param y1 起始点的Y左边
* @param x2 右上角的X坐标
* @param y2 右上角的Y坐标
* @param x3 右下角的X坐标
* @param y3 右下角的Y坐标
* @return 菱形面积
*/
public int getArea(int x1,int y1,int x2,int y2,int x3,int y3){
int v = distPointToLine(y3,y3,10,10,40,10); //垂直线
int base = distPointToPoint(x1, y1, x2, y2); //底边
return v*base;
}

/**
* 绘制平行四边形
* @param x1 起始点的X坐标
* @param y1 起始点的Y坐标
* @param x2 右上端点的X坐标
* @param y2 右上端点的Y坐标
* @param x3 右下端点的X坐标
* @param y3 右下端点的Y坐标
* @param g 画笔
* @throws IllegalAccessException
*/
public void drawPAR(int x1,int y1,int x2,int y2,int x3, int y3,Graphics g) throws IllegalAccessException{
float k = (y2 - y1)/(float)(x2 - x1);
float k1 = (y3 - y2)/(float)(x3 - x2);
if(k == k1)
throw new IllegalAccessException();

g.drawLine(x1, y1, x2, y2);
g.drawLine(x2, y2, x3, y3);
int x4 = x1 - x2 + x3;
int y4 = y1 - y2 + y3;
g.drawLine(x1, y1, x4, y4);
g.drawLine(x4, y4, x3, y3);
}

/**
* 获取点到直线的距离
* @param x0 点的X坐标
* @param y0 点的Y坐标
* @param x1 直线的起始点X坐标
* @param y1 直线的起始点Y坐标
* @param x2 直线的终点的X坐标
* @param y2 直线的终点的Y坐标
* @return
*/
public int distPointToLine(int x0, int y0, int x1, int y1, int x2, int y2)
{
int A = y2 - y1;
int B = x1 - x2;
int C = x2*y1 - x1*y2;
return Math.abs(A*x0 + B*y0 + C) / distPointToPoint(x2,y2,x1,y1);
}

/**
* 获取点到点的距离
* @param x1 起始点的X坐标
* @param y1 起始点的Y坐标
* @param x2 终点的X坐标
* @param y2 终点的Y坐标
* @return
*/
private int distPointToPoint(int x1,int y1,int x2,int y2) {
int dx = Math.abs(x1 - x2);
int dy = Math.abs(y1 - y2);
return sqrt((dx*dx + dy*dy));
}


double Sqrt(double d)
{
double tolerance = 0.00001;
double x, nx = 0.0;

if(d < tolerance) return 0.0;
x = d;
while(true) {
nx = 0.5 * (x + d / x);
if(Math.abs(x - nx) < tolerance) break;
x = nx;
}
return nx;
}

public int sqrt(int n) {
int r, l, t; //r: 方根; l: 余数; t: 试除数;
if (n < 100) {
r = 9;
while (n < r * r)
r--;
} else {
r = sqrt(n / 100);
l = n - r * r * 100;
t = l / (r * 20);
while (t * (r * 20 + t) > l) {
t--;
}
r = r * 10 + t;
}
return r;
}
}
zhftxj 2011-10-10
  • 打赏
  • 举报
回复
没有解决办法嘛?

各位没有遇到过这类逻辑嘛?
wtc860104 2011-10-09
  • 打赏
  • 举报
回复
j2me绘图啥的不熟悉具体实现。不过你这个问题可以用坐标来实现。中学学过坐标吧?一次函数直线y=kx+b
你这个斜矩形是神马东西?我只知道平行四边形和矩形。平行四边形是两组平行直线围城的。这两组的斜率k不同
但是每组的两条直线是k相同b不同。面积的话,你可以把其中三个点的坐标算出来,然后用海伦公式一套,得出的值再乘2就是平行四边形的面积。至于矩形神马的就是这两组k相乘等于-1
esionxiao 2011-10-09
  • 打赏
  • 举报
回复
画线条不就好咯
zhftxj 2011-10-09
  • 打赏
  • 举报
回复
有莫有知道的啊...
帮个忙
zhftxj 2011-10-09
  • 打赏
  • 举报
回复
drawRectangle(150, 100, 200, 200)

这是SWT中绘制方法,绘制出, x,y点,然后宽高

我想要实现在就是把这个图形斜,并且得到这个图形的面积 SWT中没有处理这种图形...

只能自己重新想办法了...还没有思路...

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧