绘制一个三角型,当鼠标点击三角边框或内部时,改变他的颜色。当多个三角重叠时,能够绘制出覆盖效果(根据高度参数决定谁在定点),并且鼠标点击时可
以精确选择这些交错在一起的三角型。
   这样的功能使用draw2d可以实现吗?我觉得draw2d在鼠标点击的精确度上不是很好,尤其是三角型菱形这样的图形,点击图形以外的地方依然会触发点击或拖拽事件。
我想用java实现类似于mapinfo的功能。请问该使用什么来开发。我听说过mapx 和 MapXtreme这些mapinfo公司提供的接口,但是我想做单机程序,不需要服务器部署
或连接外网。mapx 和 MapXtreme似乎必须要部署服务器,而且似乎有一些也不支持JAVA。请大家给点意见,多谢了。

解决方案 »

  1.   

    我觉得是不是可以自己来实现 我不太清楚哪里可以用成熟的api
    但是判断是三角形外部还是内部根据三角形三边的直线方程进行
      

  2.   

    请问你能给出具体的直线方程公式吗?已知三条边为abc,获得任意一点x,判断x是否为abc范围内的一点。
    另外窗体的左上角 xy坐标是[0,0],向右平移x增大,向下y增大。这一点似乎与上学时候学的坐标系不同。
      

  3.   

    原点位置和坐标轴方向不是问题
    就举个单元示例
    假设有一直线方程是 y=kx+b (k>0 b>0)
    对于这样一条直线在传统笛卡儿坐标系中 
    对于点(x1,y1) 
    如果y1>kx1+b 则此点在直线上方
    如果x1>(y1-b)/k 则此点在直线右方
    依次类推
      

  4.   

    去掉条件限制(k>0 b>0)
    但k=0时要特殊处理
      

  5.   

    没学过直线方程,问个十分外行的问题。
    我要计算的是三角形,那么你说y1>kx1+b 则此点在直线上方。
    这里提到的“直线”指的是三角形的某一条边吗?
    还是三角形内部任意两点形成的直线?
      

  6.   

    那可以划定区域先 保证在一定区域(降低比较范围)内有三角形包含
    先给一个叉乘变通的判断方法吧
    比如三角型外有点P,三角型ABC,先算ABC的面积,然后算
    三角形APB,BPC,CPA的面积,加起来的和如果等于ABC的面积的话,那就是在三角型内(或边上)了
    面积用海伦公式
      

  7.   

    叉乘法
    沿着三角形的边按顺时针方向走,判断改点是否在每条边的右边(这可以通过叉乘判断),如果该点在每条边的右边,则在三角形内,否则在三角形外。这个算法只用到了三次叉乘,没有除法运算和三角函数、开根号等运算,所以效率很高,而且精度很高(没有浮点误差)。设三角形三点A(x1,y1)B(x2,y2)C(x3,y3),已知点M(x,y),1,先求出三个向量MA,MB,MC. 2,计算MA X MB,MB X MC,MC X MA (X表叉乘)3,如果此三组的向量叉乘的结果都是同号的(或都正,或都负),即方向相同的,则说明点M在三角形每条边的同侧,即内部。否则必在外部!
    具体示例:
    A(0,3) B(0,0) C(3,0)          M(1,1)
    MA (1,-2)
    MB (1,1)
    MC (-2,1) MA X MB = 3
    MB X MC = 3
    MC X MA = 3
    N(3,3)
    NA (3,0)
    NB (3,3)
    NC (0,3) NA X NB = 6
    NB X NC = 9
    NC X NA = -9根据以上规则可判断M点在内 N点在外