Intersection coordinates ?

Hi,
Is it possible to get coordinates of the intersection points when I intersect two geometries (e.g. a line with a polygon) using Oracle Spatial ?
Thanks

Have you read Re: point of intersection

Similar Messages

  • Coordinates of intersection of waveform

    i have two arrays plotted on the same graph. I am looking for the coordinates where these two graphs intersect. The information about the exact graph is given in the attached VI.
    thanks a lot for your help. I have a feeling that this is quite trivial but would really appreciate any help.
    Attachments:
    find intersection.vi ‏83 KB

    an easy method is to find the shortest distance between the array points |Ya-Yb|.  The closest value will give you an approximation (assuming the waveforms share a T0 and dT).  You can speed this up with a binary search.  This assumes that the graphs have one and only one intersection.  Interpolation can give you a more exact value.  Sloving the functions for the forms also will give you an answer assuming that you have the functions defining the curves (through curve fitting)
    Paul Falkenstein
    Coleman Technologies Inc.
    CLA, CPI, AIA-Vision
    Labview 4.0- 2013, RT, Vision, FPGA

  • How can the coordinates of an intersection point of a cross

    there is a cross on a chart and i need the coordinates of the intersection point as a reference for further measurements

    The simplest way is pattern matching. Train the routine with the cross, then search for it. It should always be within about 1 pixel of the intersection. You can use sub-pixel accuracy to improve the results sometimes.
    To improve the pattern matching results, you can use edge or peak finding routines to find the horizontal and vertical lines that make up the cross. You can determine the center from these lines.
    Bruce
    Bruce Ammons
    Ammons Engineering

  • How to query objects intersecting the coordinates

    Hi all,
    I am an Oracle Spatial Newbie. I made a search on the Google but could not find a simple answer for a simple question. I migrated my database from PostGIS to Oracle. I would like to learn the Oracle version of my PostGIS query:
    SELECT * from ykn WHERE ST_Intersects(poly, ST_MakeEnvelope(30.0, 37.792 , 30.1, 37.8,900914));
    All my records are converted to Oracle geometry type using a conversion tool. And also the R-tree index is added. I also would like to know how to query if the query has to be different to use the index.
    I'll be glad if you could help.
    Kindest Regards
    telmessos

    telmessos,
    By the way, what is the A here? I thought it is the table name and replaced A with YKN but got the same message."A" is an alias for the table YKN. You HAVE to use an alias whenever dereferencing the fields of any Oracle object. SDO_GEOMETRY
    is an Oracle object and sdo_srid is a field of that object so, to access its value you have to use an alias.
    Now, the original query - assuming the table sdo_geometry column is called POLY - didn't have an alias which would be confusing:
    select a.poly.sdo_srid from ykn where rownum < 2;
    -- Result
    ORA-00904 - "A"."POLY"."SRO_SRID": invalid identifier.What is missing here is the alias a after the table name YKN as in the following:
    select a.poly.sdo_srid from ykn a where rownum < 2;So, what we have is a rule
    Whenever accessing the fields / methods of an SDO_GEOMETRY we must:
    +1. Alias the table+
    +2. Use the alias when accessing column methods or fields eg <alias>.<column>.<field/method>+
    An example:
    select a.geom.sdo_gtype, a.geom.sdo_srid, a.geom.sdo_point.x, a.geom.sdo_point.y, a.geom.get_WKT() as wkt
      from projpoint2d a
    where rownum < 3;
    -- Results
    GEOM.SDO_GTYPE GEOM.SDO_SRID GEOM.SDO_POINT.X GEOM.SDO_POINT.Y WKT
    2001           NULL          363088.42        5405618          POINT (363088.42 5405618.0)
    2001           NULL          363202.85        5407375.46       POINT (363202.85 5407375.46)Note: All column above are fields of sdo_geometry except get_WKT() which is a method of sdo_geometry but still needs an alias to execute.
    HTH
    regards
    Simon

  • How to find intersection point between a lineseries and a vertical line.

    I have a lineseries chart (refer the screenshot). As I move the spend slider shown in the attachment, a vertical line is drawn in the chart. (I did this using the cartesian canvas as annotation element - using canvas.moveTo(), canvas.lineTo() functions)
    I want to find out the intersection point(y value) where the vertical line meets the lineseries. Can someone help me on this. It will be really helpful.
    Thanks,
    Jayakrishnan

    Here are a few functions I wrote years ago for common chart transformations... the function you're going to focus on for your solution is chartToScreen...
    *  Converts the screen position to chart value position
    *  @param thePos - Number - The position you want to convert
    *  @private
            private function getChartCoordinates(thePos:Point):Object
                   var tmpArray:Array = dataTransform.invertTransform(thePos.x, thePos.y);
                   return {x:tmpArray[0], y:tmpArray[1]};
    *  Takes a non-numeric chart value and returns a proper numeric value
    *  @param inValue - String - The display name of the instance showing on the axis (eg. if we're showing months, it might be 'Sep - 06'
    *  @param theAxis - IAxis - The axis on which we're looking
              public function getNumericChartValue(inValue:String, theAxis:IAxis):Object
                   var axisCache:Array = new Array({inValue: inValue})                 
                   if(!(theAxis is LinearAxis))
                        theAxis.mapCache(axisCache, "inValue", "outValue", true);
                        return {numericValue: axisCache[0].outValue}
                   else
                        return {numericValue: Number(inValue)};
    *  Converts the chart values into screen coordinate values
    *  @param chartX - Number - The display name of the instance showing on the axis (eg. if we're showing months, it might be 'Sep - 06'
    *  @param chartY - Number - The axis on which we're looking
              public function chartToScreen(chartX:Number, chartY:Number, theSeries:Series):Point
                   var tmpCache:Array = new Array({chartX:chartX, chartY:chartY});
                   if(theSeries)
                        theSeries.dataTransform.transformCache(tmpCache, "chartX", "screenX", "chartY", "screenY");
                   else
                        dataTransform.transformCache(tmpCache, "chartX", "screenX", "chartY", "screenY");
                   return new Point(Math.round(tmpCache[0].screenX), Math.round(tmpCache[0].screenY));
    *  takes a point in mouse position, and runs it through converting to chart coordinates, converts chart coordinate to numeric value if needed
    *  and then back into mouse position to get the nearest axis snap point
    *  @param thePoint - Point - The position we're converting
    *  @private
              private function getSnapPosition(thePoint:Point):Point
                   var chartPoint:Object = getChartCoordinates(new Point(thePoint.x, thePoint.y));
                   //if either of the axis chart results is not in numeric format, we get the numeric equivalent of it
                   var chartX:* = chartPoint.x;
                   var chartY:* = chartPoint.y;
                   chartX = getNumericChartValue(chartPoint.x, CartesianChart(this.chart).horizontalAxis).numericValue;
                   chartY = getNumericChartValue(chartPoint.y, CartesianChart(this.chart).verticalAxis).numericValue;
                   return chartToScreen(chartX, chartY, null);

  • [VBA] how to catch the coordinates of a value on a pivot

    Hi to all
    I have a pivot T (i.e. see below)
    Suppose I click inside the  cell with  "16"... I need to have (in VB script) to have the coordinates of the pivot  cell (as well as
    GETPIVOTDATA give in formulas).
    Do you know a way to obtain (in that example) the "CCC", "z","feb" values when I click on number 16?
    I would like to have the text that is written inside the tool tip
    thank you
    Daniele.b75

    I'm sure that there is a better way, but this should work:
    Sub PivotTableReading()
        Dim PT As PivotTable
        Dim PF As PivotField
        Dim PI As PivotItem
        Dim rngC As Range
        Dim strVal As String
        Dim strValName As String
        Set rngC = Selection.Cells(1)
        On Error GoTo ErrHandler
        For Each PT In ActiveSheet.PivotTables
            If Intersect(rngC, PT.DataBodyRange) Is Nothing Then GoTo NextPT
            For Each PF In PT.PivotFields
                For Each PI In PF.PivotItems
                    If Not Intersect(rngC, PI.DataRange) Is Nothing Then
                        strVal = strVal & IIf(strVal = "", "", Chr(10)) & PF.Name & ": " & PI.Name
                    End If
                Next PI
    RHere:
            Next PF
    NextPT:
        Next PT
        If strValName <> "" Then strVal = strVal & Chr(10) & strValName & ": " & rngC.Value
        MsgBox strVal
        Exit Sub
    ErrHandler:
        strValName = PF.Name
        Resume RHere
    End Sub

  • Calculating intersection of circles giving NaN first 'round'.

    See attachment.
    When I give the correct parameters as input, the output is always NaN.
    However, when I run the VI again, the correct x,y coordinates are returned.
    Obviously this is not correct behaviour I want in my VI. What did I do wrong here?
    Thanks,
    Marvin
    Solved!
    Go to Solution.
    Attachments:
    Calculate Intersection Circles.vi ‏32 KB

    marvin117 wrote:
    What's the point of local variables if they don't work that way?
    Although local variables are often demonized, there are proper uses for them.  Coming from a text-programming background, you're used to using variables and, presumably, not accustomed to things happening in parallel.  The first thing I noticed, which is certainly not obvious to anyone, is that your local variables are read in every frame of the Sequence structure immediately, but the indicators aren't written until the calculations happen in the first frame.  In this way, the Sequence structure is highly non-intuitive.  National Instruments owes you an apology for that.
    The second thing I noticed was, in your second frame, that you were using the results of calculations with a local variable in the same frame.  You'll never be able to know that the calculations will happen before the locals are read.  There's your classic race condition.
    I (almost) only use local variables to update front panel control values.  If I find myself using them to read control values, I hang my head and wish I had designed my code better.  Try to think in terms of "The wire is the variable."  It's almost always the right way to think about data, and data flow.
    Jim
    You're entirely bonkers. But I'll tell you a secret. All the best people are. ~ Alice

  • Need help in a game design.Cirles,lines intersections

    Hello,
    Im trying to create a board game (the go game) but i have problems with the design. Till now i have design a 19 * 19 table and what i want is when i click with the mouse on this table to display circles, but i want them exactly on the intersection. With my program i get circles everywhere i click and not on the intersection of the line.
    So if anyone can help me,i would like to tell me, how can i place the circle exactly on the intersection? Also i would like to eliminate the clicks just on the table and not outside of it.
    Please help if anyone knows, im not that expert in java
    My code is this till now.
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    public class goGame extends JFrame {
    private int x1Value , y1Value ;
    boolean isWhitesTurn = true,first = true;
    public goGame()
    super( "Go game" );
    Color redbrown = new Color (75,17,17);
    setBackground(redbrown);
    addMouseListener(
    // anonymous inner class
    new MouseAdapter() {
    // store drag coordinates and repaint
    public void mouseClicked( MouseEvent event )
    x1Value = event.getX();
    y1Value = event.getY();
    repaint();
    } // end anonymous inner class
    ); // end call to addMouseMotionListener
    setSize( 700,550 );
    setVisible(true);
    public void paint( Graphics g )
    Graphics2D graphics2D = (Graphics2D ) g;
    Color redbrown = new Color (75,17,17);
    g.setColor(redbrown);
    Color lightbrown = new Color (192,148,119);
    g.setColor(lightbrown);
    if (first) {
    //paint yellow the big rectangle
    graphics2D.setPaint(new GradientPaint (600,100, Color.yellow,100, 10,Color.red,true));
    graphics2D.fillRect(60,60,450,450);
    graphics2D.setPaint(Color.black);
    graphics2D.setStroke(new BasicStroke(3.0f));
    //draw rows
    int y=60;
    for (int n=0; n<=18 ; n++)
    g.drawLine(60,y,510,y );
    y= y + 25;
    //draw columns
    int x = 60;
    for (int n=0; n<=18 ; n++)
    g.drawLine(x,510,x,60);
    x = x + 25;
    g.setColor(Color.green) ;
    //draw the 1st 3 vertical dots
    int z = 133;
    for (int n=0; n<=2; n++)
    g.fillOval(133,z,5,5);
    z = z + 150;
    //draw the 2 vertical dots of the 1st row-dot , the 1 already exists
    int w = 283;
    for (int n =0; n<=1; n++)
    g.fillOval(w,133,5,5);
    w = w + 150;
    //draw the 2 vertical dots of the 2nd row-dot
    int t = 283;
    for (int n=0; n<=2; n++)
    g.fillOval(283,t,5,5);
    t = t + 150;
    //draw the last dots
    g.fillOval(433,283,5,5);
    g.fillOval(433,433,5,5);
    first = false;
    if (isWhitesTurn) g.setColor(Color.white);
    else g.setColor(Color.black);
    g.fillOval( x1Value, y1Value,20,20 );
    isWhitesTurn = !isWhitesTurn ;
    // execute application
    public static void main( String args[] )
    goGame application = new goGame();
    application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    This will capture vertical and horizontal
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.util.*;
    public class GoGame extends JFrame
    public GoGame()
         getContentPane().setLayout(null);
         setBounds(10,10,510,520);
         getContentPane().add(new TheTable());
         setVisible(true);
    public class TheTable extends JPanel
         int[][]points  = new int[19][19];
         boolean black  = true;
    public TheTable()
         setBounds(20,20,453,453);
         addMouseListener(new MouseAdapter()
              public void mouseReleased(MouseEvent m)
                   Point p = clickOnIntersection(m.getPoint());
                   if (p != null && points[p.x/25][p.y/25] == 0)
                        int x = p.x/25;
                        int y = p.y/25;
                        if (black)
                             points[x][y] = 1;
                             black = false;
                        else
                             points[x][y] = 2;
                             black = true;
                        capture(x,y);
                        repaint();
    private Point clickOnIntersection(Point p)
         Rectangle rh = new Rectangle(0,0,getWidth(),4);
         Rectangle rv = new Rectangle(0,0,4,getHeight());
         for (int h=0; h < 19; h++)
              rh.setLocation(0,h*25-1);
              if (rh.contains(p))
                   for (int v=0; v < 19; v++)
                        rv.setLocation(v*25-1,0);
                        if (rv.contains(p)) return(new Point(v*25+1,h*25+1));
         return(null);
    private void capture(int x, int y)
         onTheY(x,y,points[x][y]);
         onTheX(x,y,points[x][y]);
    private void onTheY(int x, int y, int col)
         for (int j=x-1; j > -1; j--)
              if (points[j][y] == 0) break;
              if (points[j][y] == col)
                   outOnY(j,x,y);
                   break;
         for (int j=x+1; j < 19; j++)
              if (points[j][y] == 0) break;
              if (points[j][y] == col)
                   outOnY(x,j,y);
                   break;
    private void onTheX(int x, int y, int col)
         for (int j=y-1; j > -1; j--)
              if (points[x][j] == 0) break;
              if (points[x][j] == col)
                   outOnX(j,y,x);
                   break;
         for (int j=y+1; j < 19; j++)
              if (points[x][j] == 0) break;
              if (points[x][j] == col)
                   outOnX(y,j,x);
                    break;
    private void outOnY(int f, int t, int y)
         for (f=f+1; f < t; f++) points[f][y] = 0;
    private void outOnX(int f, int t, int x)
         for (f=f+1; f < t; f++) points[x][f] = 0;
    public void paintComponent(Graphics g)
         super.paintComponent(g);
         Graphics2D g2 = (Graphics2D)g;
         g2.setPaint(new GradientPaint(getWidth(),getHeight(),Color.yellow,0,0,Color.red,true));
         g2.fillRect(0,0,getWidth(),getHeight());
         g2.setColor(Color.black);
         for (int n=0; n < 19; n++)
              g2.fillRect(0,n*25,getWidth(),3);
              g2.fillRect(n*25,0,3,getHeight());
         g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);          
         g2.setColor(Color.green) ;
         for (int n=0; n < 3; n++)
              g2.fillOval(25*3-1,n*150+74,5,5);
              g2.fillOval(25*9-1,n*150+74,5,5);
              g2.fillOval(25*15-1,n*150+74,5,5);
         for (int x=0; x < 19; x++)
              for (int y=0; y < 19; y++)
                   if (points[x][y] != 0)
                        if (points[x][y] == 1) g.setColor(Color.black);     
                        if (points[x][y] == 2) g.setColor(Color.white);     
                        g2.fillOval(x*25-9,y*25-9,20,20);
    public static void main(String[] args)
         GoGame game = new GoGame();
         game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }Noah

  • Line intersection in lawbview 7.1

    hi
    i m using labview 7.1 for sme image processing
    i have detected 4 circles in an image which are in the following fashion
                                           1
                                        2     3
                                           4
    From the IMAQ find circles option, i get the following data:
    pos x     pos x     pos x     pos x    - this is the x pos of the center
    pos y     pos y     pos y     pos y   -  this is the y pos of the center
    radius    radius    radius   radius   -  radius in pixel
    core       core      core      core     -  area in pixel
    now i have to find the intersection of the lines passing through the centers of the (1st,4th) & (2nd,3rd) circle centres.
    the line intersection option is asking for the co ordinates of the points of the 1st & 2nd line . How can i give the point co ordinates from the circle data?
    i.e for the 1st line i must enter the x & y coordinates of the center of 1st & 4th circle and for the 2nd line, x & y of the centers of the 2nd & 3rd cirlces
    how can i do it?

    james bond,
        I'm glad to hear that the snapshot helped.  As far as calibration, I believe that you are wanting to set up a calibration in LabVIEW, right?  It sounds like you know how to set up calibrations in Vision Assistant.  One of the more common ways to calibrate an image using a sheet of paper with a grid of dots on it with a known distance between the dots.  This is talked about in more detail in this document which also has some helpful links at the bottom:
    http://digital.ni.com/public.nsf/websearch/5FC615E2B4CFE8FA86256AC4007C9A42?OpenDocument
        There are several sample programs for image calibration in LabVIEW, specifically in the Simple Calibration Example.vi.  If you open that one you can see that they use a VI called IMAQ Set Simple Calibration.vi.  This VI will handle calibrations when you input your image and the various calibration settings as in the example VI.  What I would recommend, though, is to do your calibration in Vision Assistant like you were mentioning, then you can create LabVIEW code (Tools >> Create LabVIEW VI...) from it and it will create all of the VI's and settings you need to calibrate your image and use your calibrated image in LabVIEW.  If I am misunderstanding please let me know.  Thank you!
    -Allison S.
    Applications Engineering
    -Allison S.
    Calibration Services
    Product Support Engineer

  • Intersecting Objects using Java

    Hullo everyone,
    I've got a problem at the moment so I've decided to turn to these forums once again for some helpful insight as 2 + hours of Googling hasn't helped me in the slightest. I'm trying to create a mini-scale Katamari game (hopefully you're familiar with it, basically it's one ball rolling over other balls to grow in size) on Java and I've finally got all my graphics and move directions in place. Now though I can't seem to get the collision to work...
    I'm trying to make the Katamari circle intersect with the little circle items on the playing field but currently the ball circle just ghosts over them. So basically I'm trying to get a circle to collide with other circles but I have no idea where to start. :S
    My circle items contain int x, y and radius fields and have been automatically set to their respective sizes by the game.
    I was thinking of working something out like:
    boolean testIntersection(Item item)
    if (distance between katamari ball and item <= radius of ball + radius of item)
    return true;
    else return false;
    But whenever I put something like that in, it still doesn't detect collision. Any thoughts or help on this would be very much appreciated. :)

    If you use object that implement Shape, then there is a contains and a collision implemented in the Shape interface.
    Aside from that, you need to calculate from the center point of both your objects to get a true distance:
    if your objects use an upper left corner for the drawing location and that is what your x and y represent, then you need to translate that to the center of your object. The distance between you objects can be given by:
    sqrt((X2-X1)^2 + (Y2-Y1)^2)
    Where X1, X2, Y1, and Y2 are center coordinates of your object.
    Note this well always be a positive value.
    The tolerance of your distances for an intersection would be R1+R2 so you will get the resulting conditional:
    if((R1+R2)<sqrt((X2-X1)^2 + (Y2-Y1)^2) {
      //what ever collision code you want
    }Please note, that you may want to include equality into your conditional and use the "<=" comparator, to include the condition that they "kiss".
    Also please note that these values need to be implemented in double, rather than int to do away with errors introduced by integer math and when you do implement using double, then double introduces it's own set of errors due to incapability to absolutely represent values not inherently reproducible by the double type. To over come that you may want to implement using a delta value or "close enough:
    {code}
    if(delta < abs(((R1+R2)-sqrt((X2-X1)^2 + (Y2-Y1)^2)) {
    //what ever collision code you want
    {code}

  • Mouse dragged event with unexpected coordinates

    I am dragging the mouse on a half circle from the middle left to the top middle. This results in mouse events with the coordinates form (10,90) ->(100,10)
    Letting the mouse go and then dragging it further to the left, the coordinates in the of the event are similar than the starting point of the first mouse drag event.
    Can anyone shed some light on this peculiar behavior?

    First of, I have to apologize for the example not being as minimalistic as it might be, but on the plus side, I know now why this happens, I just don't know how to work around it.
    * To change this license header, choose License Headers in Project Properties.
    * To change this template file, choose Tools | Templates
    * and open the template in the editor.
    package javafxtest;
    import java.util.ArrayList;
    import javafx.application.Application;
    import javafx.beans.property.DoubleProperty;
    import javafx.beans.property.SimpleDoubleProperty;
    import javafx.event.ActionEvent;
    import javafx.event.EventHandler;
    import javafx.geometry.Dimension2D;
    import javafx.geometry.Point2D;
    import javafx.scene.Group;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.control.Label;
    import javafx.scene.input.MouseEvent;
    import javafx.scene.layout.StackPane;
    import javafx.scene.paint.Color;
    import javafx.scene.shape.Circle;
    import javafx.scene.shape.Polygon;
    import javafx.scene.shape.Rectangle;
    import javafx.scene.shape.Shape;
    import javafx.scene.transform.Rotate;
    import javafx.stage.Stage;
    * @author andi
    public class HandleRotation extends Application {
        private DoubleProperty currentRotation;
        private ArrayList<Double> angles;
        @Override
        public void start(Stage primaryStage) {
            currentRotation = new SimpleDoubleProperty(this, "currentRotation", 10);
            SteeringWheelGroup background = new SteeringWheelGroup(200);
            background.setManaged(false);
            Group g = new Group(background);
            final Point2D centerPoint = new Point2D(100, 100);
            angles = new ArrayList<>(3);
            angles.add(190.0);
            angles.add(270.0);
            angles.add(350.0);
            double step = (180.0 - 2 * currentRotation.doubleValue()) / (angles.size() - 1);
            int radius = 100;
            final int yTranslation = 15; // might be due to the labels
            Polygon handle = createHandle(centerPoint, radius, yTranslation);
            g.getChildren().add(handle);
            StackPane root = new StackPane();
            Scene scene = new Scene(g, 300, 250);
            primaryStage.setTitle("Handle Rotation!");
            primaryStage.setScene(scene);
            primaryStage.show();
         * Calculate the base point for the label. This is the point on the arc, matching the angle.
         * @param center point of the circle
         * @param radius radius of the circle
         * @param angle in degree in [0,180]
         * @return Point on the circle
        Point2D calculateBasePoint(Point2D center, double radius,
                double angle) {
            float newX = (float) (center.getX() + radius * Math.cos(Math.toRadians(angle)));
            float newY = (float) (center.getY() + radius * Math.sin(Math.toRadians(angle)));
            return new Point2D(newX, newY);
         * Create the polygon that represents the handle
         * @param centerPoint
         * @param radius
         * @return
        private Polygon createHandle(final Point2D centerPoint, int radius, final int yTranslation) {
            double baseAngle = 180;
            Point2D p1 = calculateBasePoint(centerPoint, radius, baseAngle - 5);
            Point2D p2 = calculateBasePoint(centerPoint, radius, baseAngle + 2);
            Point2D p3 = calculateBasePoint(centerPoint, radius*0.65, baseAngle + 2);
            Point2D p4 = calculateBasePoint(centerPoint, radius*0.65, baseAngle - 7);
            double[] points = {p1.getX(), p1.getY(), p2.getX(), p2.getY(), p3.getX(), p3.getY(), p4.getX(), p4.getY()};
                      Polygon polygon = new Polygon(points);
    //        polygon.setOpacity(0);
            polygon.setTranslateY(-yTranslation);
            final Rotate rotationTransform = new Rotate(currentRotation.doubleValue(), centerPoint.getX(), centerPoint.getY());
            polygon.getTransforms().add(rotationTransform);
            polygon.setOnMouseDragged(new EventHandler<MouseEvent>() {
                @Override
                public void handle(MouseEvent event) {
                    if (event.getY() < centerPoint.getY()) {
    System.out.println("Event: "+event);                   
                                                       Point2D point = new Point2D((float)event.getX(), (float)event.getY());
                        double newAngle = angleBetween2Lines(centerPoint, point);
                        if (newAngle < 0) {
                            newAngle = (90 + newAngle)+ 90;
    System.out.println("Set angle on mouse drag: "+newAngle);
                        if (newAngle < 10) {
                            newAngle = 10;
                        if (newAngle > 170) {
                            newAngle = 170;
                        currentRotation.set(newAngle);
            polygon.setOnMouseReleased(new EventHandler<MouseEvent>() {
                @Override
                public void handle(MouseEvent event) {
                    snapToNearestAngle();
                    rotationTransform.setAngle(currentRotation.doubleValue());
            return polygon;
         * Snap to the correct angle. Correct angle is angle belonging to the nearest label.
        void snapToNearestAngle() {
            double currentAngle = currentRotation.doubleValue() + 180;
            double currentMin = 360;
            int minIndex = 0;
    System.out.println("Current rotation is "+currentAngle);
            for (int i = 0; i < angles.size(); i++) {
                double angle = angles.get(i);
                double diff = Math.abs(angle - currentAngle);
                if (diff < currentMin) {
                    currentMin = diff;
                    minIndex = i;
    System.out.println("new minDifference at "+i+": "+diff);
            Double destinationAngle = angles.get(minIndex);
    System.out.println("DestinationAngle is "+currentAngle+" -> "+(destinationAngle - 180));
            if (destinationAngle < 180 + 10 || destinationAngle > 360 - 10) {
                throw new IllegalStateException("Angle is out of range: "+currentRotation.doubleValue()+" -> "+destinationAngle);
            currentRotation.set(destinationAngle - 180);
         * Calculate the angle between the vector horizontally to the left from the center
         * and the current point.
         * @param center point
         * @param point current point
         * @return angle in degree
        double angleBetween2Lines(Point2D center, Point2D point) {
            double slope2 = calculateSlope(center, point);
            double angle = Math.atan(slope2);
            if (point.getX() > center.getX()) {
                angle += Math.PI/2;
    System.out.println("Slope: "+slope2+" angle "+Math.toDegrees(angle));
            return Math.abs(Math.toDegrees(angle));
         * Caluculate the slope of the line defined by two points.
         * The first point is the center of a circle and the second
         * point roughly lies on the circle.
         * @param center point
         * @param point on the circle
         * @return slope of the connecting line.
        double calculateSlope(Point2D center, Point2D point) {
    System.out.println("center="+center+",point="+point);       
            double absSlope = Math.abs((point.getY() - center.getY()) / (point.getX() - center.getX()));
            if (point.getY() > center.getY()) {
                if (point.getX() > center.getX()) {
                    // bottom right
                    return -absSlope;
                } else {
                    // bottom left
                    return absSlope;
            } else {
                if (point.getX() > center.getX()) {
                    // top right
                    return absSlope;
                } else {
                    // top left
                    return -absSlope;
         * The main() method is ignored in correctly deployed JavaFX application.
         * main() serves only as fallback in case the application can not be
         * launched through deployment artifacts, e.g., in IDEs with limited FX
         * support. NetBeans ignores main().
         * @param args the command line arguments
        public static void main(String[] args) {
            launch(args);
       private class SteeringWheelGroup extends Group {
            public SteeringWheelGroup(int destinationWidth) {
                int topPadding = 0;
                Rectangle rect = new Rectangle(getImageWidth(), getImageWidth(), Color.RED);
                double scale = destinationWidth / rect.getWidth();
                rect.setScaleX(scale);
                rect.setScaleY(scale);
                Circle circle = new Circle(getImageWidth()/2, getImageWidth()/2, getImageWidth()/2, Color.BLUE);
                circle.setScaleX(scale);
                circle.setScaleY(scale);
                Group rotationGroup = new Group(/*rect,*/ circle);
                rotationGroup.setManaged(false);
                int width = getImageWidth();
                Rectangle clipRectangle = new Rectangle(0, 0, width, width / 2);
                Circle clipCircle = new Circle(width / 2, width / 2, width / 2);
                Shape clip = Shape.intersect(clipRectangle, clipCircle);
                rotationGroup.setClip(clip);
                this.getChildren().add(rotationGroup);
                //double h = calculateHeigthOverHorizon(angle, destinationWidth/2);
                //setTranslateY(-h+topPadding);
            public final int getImageWidth() {
                return 479;
    Here is how you can reproduce my effect:
    Grab the black handle
    Drag the mouse top and right until you approach the angle -90 (have an eye out on the console log)
    Let the mouse go: the handle will snap to 90 degree
    Grab the handle a second time and move further right
    You will see that the angle printed out do not match what you expect.
    Let the mouse go, the Handle snaps back to it's original position
    As the rotation does not happen around the polygon's center, I have to use a Rotaion effect, which is applied. While I can drag the shape from the rotated location the dragging is always measured from its base position.
    So what can I do to work around this?
    final Rotate rotationTransform = new Rotate(currentRotation.doubleValue(), centerPoint.getX(), centerPoint.getY());
    polygon.getTransforms().add(rotationTransform);
    If worse comes to worst, I can use a circular handle covering everything, then I can rotate around its center, but I would like to avoid this.

  • The intersection point of two lines in 3D

    How to calculate the intersection point of two lines in 3D?
    source code!

    this is actually a rather easy operation. lets look at some basic properties of lines / vectors in 3D space:
    1. If two lines intersect at a single point, then there must be exactly one plane in which the two lines are co-planar. This is pretty trivial to prove, but I won't bother here, because you can google to find out that two vectors that extend from a common point define a single plane.
    2. If you take the cross-product of two vectors, the resulting vector is guaranteed to be perpendicular to both lines (this is a basic property of a cross-product). If the two lines intersect, then this cross-product will be the normal vector to the plane in which both lines lie.
    3. Now transform (rotate) yours space such that your z-axis becomes parallel to the normal vector of that plane.
    Now, the parametric equation for a line in 3D space is this:
    (x, y, z) = (xo, yo, zo) + k(xd, yd, zd)
    After you have transformed your space, you will notice that the equation of each line will now be
    (x, y, z) = (xo, yo, zo) + k(xd, yd, 0)
    If zo is equal for both lines, then the two lines intersect. Otherwise, the two lines do not intersect.
    if the intersection exists, then to solve for it, you ignore the z coordinate, and treat it like a two dimensional system:
    (x, y) = (xo, yo) + k(xd, yd)
    you can use the basic 2D formula y - yo = m(x - xo), or y = m(x - xo) + yo
    you can calculate m = yd / xd.
    which simplifies to y = mx -mxo + yo, or 0 = mx - y + (yo - mxo)
    you now have two equations of the form Ax + By + C = 0.
    From there, you can use Cramer's rule to find the intersection of the two lines.
    It sounds kind of complicated when you read it as I have presented it, but it's actually extremely easy to write a program for, because each step is simple mathematic operation with basically no decisions involved (hence no if-structures, except at the one point where you actually need to determine if the lines intersect).
    So to reiterate, the steps required are:
    1. Check if lines are parallel. If yes, check if they are the same line, and then stop.
    2. If not parallel, cross-multiply the direction vectors of each line.
    3. Rotate your space such that z is parallel with cross-product of lines
    i. dot-product of z axis (0, 0, 1) with cross-product of lines gives angle*
    ii. cross-product of z axis (0, 0, 1) with cross-product of lines gives axis of rotation.
    iii. rotate your lines (i.e. point and direction vector) about that axis by negative of ange determined in (i).
    4. if z value of points from both lines is the different, no solution. stop.
    5. otherwise, apply Cramer's rule.
    6. done.
    * obtaining the angle of rotation with the dot product relies on the angle being less than 90 degrees, so check if z value of normal vector is + or -, and then perform dot product and cross-product on appropriate + or - z vector.
    - Adam

  • Find Intersection of two array elements in Oracle 9i

    How to find intersection of two arrays in pl/sql for Oracle 9i.
    it is feasible in 11g using given code but this code is not working in 9i please help....
    DECLARE
    abc LIST := list(1,2,3,4);
    def LIST := list(4,5,6,7);
    BEGIN
    dbms_output.put_line(format_list(abc MULTISET EXCEPT def));
    END;
    Thanks in advance.... :)

    Argh. Never mind. My coordinates were reversed.
    People that made my data set specified the coordinates as lat/long and I didn't question it. I can now see that Oracle expects long/lat instead, so my example works now.

  • How to get the records which has a specified x/y coordinates

    Hi,
    How to get the records which has a specified x/y coordinates. I have a table which has street data. And another table has a point data. Now I just want to get the records from street data which includes the points in the point data table. Can any one give your suggestions
    Thanks and Regards
    Aravindan

    Aravinda,
    If you want to find the line segments which intersect the given
    set of points, you can do that with SDO_RELATE.
    siva

  • 3D Coordinates

    Hi,
    My question is regarding 3D world coordinates. I have seen many discussion on the topic but none satisfies my requirement.
    1. I have a 3D object loaded in to the universe. When I click on the object, I want to get the 3D coordinate of the picked position(i.e. X, Y and Z world coordinates of the mouse clicked position) so that I can mark the selected point.
    2. How can I mark the selected point with different color?
    Can some body help. I am stuck with the scenario for quite some time.
    Thanks
    Shyam

    You wrote: "X, Y and Z world coordinates of the mouse clicked position"
    When you click on a 2D-Canvas, then you can extract two dimensions for e.g. X and Y. But I am wondering how to exctract a z-value of a mouse click?
    Usually there is another way: when a image is rendered in 3D, then there is something like a virtual plane between the viewers eye and the object(s) to be rendered. The canvas coordinates of the click position will be mapped into coordinates for a point on this plane. Then an orthogonal (to that plane) ray will direct through this point into the virtual scene. The 3D click position is where the ray intersects with the object.
    You don't have to implement this all from scratch. Most of the functionality is already covered by the picking package.
    Good luck,
    Oliver

Maybe you are looking for

  • Are we Beta testing the N97 for Nokia?

    Because if i was given this as a beta release i would have told them what i thought, the current launch version on the N97 with V10 firmware is barely an Alpha release, this phone was a rush job thrown out on the market to coincide with the launch of

  • Join two list of integer type field using CAML query

    Hi As i am struggling in Join two sharepoint list (Roles and Emplyees). As there is no lookup columns and lists are already existing and have almost 3000 + recodrs. As a part of enhancement work need to join these list. List structure is some thing a

  • Printing a booklet on 970Cse

    I have a HP 970Cse and need to know if I can print a booklet (5.5 X 8.5) using letter size paper.

  • How to get into my Mothers account? She passed away recently.

    just wandering if anyone knew what i could do to get onto my mothers account, i do not know any of her security questions or have any clue what her password would be, she passed away quite recently and i would like her music added to my ipod but i ca

  • Flash CS3 program flickers during "undo" and "save and compact"

    Hi, I have Flash CS3 Suite. I have a computer that was built in 2004, running Windows XP Professional - 2 Gb RAM although I have given the Virtual memory 4 Gb. The reason I did that is because I thought maybe my RAM wasn't enough. I have no problems