Carom analyzer

justnum

Billiards Improvement Research Projects Associate
Silver Member
Does anyone know if a carom analyzer exists? youtube and google results are limited.

The computer scans the table, identifies the ball, then the user designates a shot line.

The ideal laser line is fast to compute, however I am not sure how much it deviates from the actual rolling lines of the table.

An advantage of a carom analyzer is a quick check for finding kiss lines.

In terms or programming once the scanner identifies the position of the ball, the predicted analysis is automated.

I know its AZBilliards but the carom experts don't argue about aiming as much as the pool experts.

If any carom experts can cite the aiming/shooting methods, what are the main working systems?
 
[

The equipment setup is unique.

The fastest way to calculate a path line and its ideal reflections are affine transforms.

If no one is deploying carom analyzers then its as simple as path from cue ball to target line, parameterize the path and deploy dots, filter the set for bounding area and use basic cartesian operations to reflect the set.

At first I thought using lines would be faster, but managing points sped up the process to match real time scanning.

There are many nice features in the video you posted. The feature I wanted to implement is predicted analysis for kiss hits in carom. Finding the lines off the rails was a challenge, until I figured using point sets and reflections from algebra.

I am enjoying this project thoroughly. I tried college but those projects were not as fun as this one. Today's hardware and free tools are also light years ahead of what I learned on in college.

Does anyone need a code review or a free consult? Building math tools for augmented reality makes high school algebra xy plotting fun.
 
shot-lines mean nothing if you can't account for and calibrate speed, spin spin transfer which differs with ball cleanliness. rail responsiveness , spin is very complex mathematically, especially when you start considering all the combinations of top bottom combined with left and right spin. applying spin effectively is a huge part of carom. cloth type and wear characteristics come into play.

There is so much technique to carom that I just don't see a computer helping. Then again I don't know everything ;-) do you think it helps? how so? my point wasn't; to insult. It did make me wonder why anyone would take this on to the point of purchasing or installing it.
 
shot-lines mean nothing if you can't account for and calibrate speed, spin spin transfer which differs with ball cleanliness. rail responsiveness , spin is very complex mathematically, especially when you start considering all the combinations of top bottom combined with left and right spin. applying spin effectively is a huge part of carom. cloth type and wear characteristics come into play.

There is so much technique to carom that I just don't see a computer helping. Then again I don't know everything ;-) do you think it helps? how so? my point wasn't; to insult. It did make me wonder why anyone would take this on to the point of purchasing or installing it.

Shot analysis in carom is mentally taxing. Learning to read the table is important, however its not as fast as a computer displaying high probability lines.

In order to make more or better carom players they need the tools to create outcomes.

The first tool is having an aid to see the lines and how they reflect.

I am learning carom billiards. Compared to pool or snooker the instructional info is limited.

I have working openCV code. Now I am implementing features I want to have. The computer helps me evaluate shot options faster than looking and imagining. I

I am a pilot when I shoot, I need all my focus on the shot. Hopefully the computer takes some simple guess work out.
 
Even advanced players who know all of the systems and lines by heart modify them almost always with spin and speed in order to avoid kisses and play position with the second ball. The cue ball slides at different times based on ball speed and English.

A kiss detector isn’t feasible because you can’t tell someone what speed to hit a ball precisely. If you could it would’t help them anyway because it wouldn’t help develop feel directly.
 
shot-lines mean nothing if you can't account for and calibrate speed, spin spin transfer which differs with ball cleanliness. rail responsiveness , spin is very complex mathematically, especially when you start considering all the combinations of top bottom combined with left and right spin. applying spin effectively is a huge part of carom. cloth type and wear characteristics come into play.

There is so much technique to carom that I just don't see a computer helping. Then again I don't know everything ;-) do you think it helps? how so? my point wasn't; to insult. It did make me wonder why anyone would take this on to the point of purchasing or installing it.

Shot analysis in carom is mentally taxing. Learning to read the table is important, however its not as fast as a computer displaying high probability lines.

In order to make more or better carom players then need the tools to create outcomes.

The first tool is having an aid to see the lines and how they reflect.

I am learning carom billiards. Compared to pool or snooker the instructional info is limited.

I have working openCV code. Now I am implementing features I want to have. The computer helps me evaluate shot options faster than looking and imagining. I

I am a pilot when I shoot, I need all my focus on the shot. Hopefully the computer takes some simple guess work out.
Even advanced players who know all of the systems and lines by heart modify them almost always with spin and speed in order to avoid kisses and play position with the second ball. The cue ball slides at different times based on ball speed and English.

A kiss detector isn’t feasible because you can’t tell someone what speed to hit a ball precisely. If you could it would’t help them anyway because it wouldn’t help develop feel directly.

Dont place your academic limitations on my scientific/programming ability.
 
Whoa man. Children could be reading this.
I know:

Screenshot_20240801-205838.jpg
 
If I share the code how many of you can run python or use pip python install tools for openCV, numpy and a few other libraries.

Each system is unique however python is platform agnostic.

Even the starter code is worth sharing, it just helps you make selections from the object detection list.

BARPA will release the initial code to the public. However they are interested in the user base and how much tech support is needed.

The Harriman Academy has been in beta for years, unfortunately no one is creative enough with the open source tech.

Fortunately the Ramos Foundation secured funding for a research/teaching scholar. However it is unclear the best way to deploy this innovation in billiard analysis.

A futurist from the Reyes Billiard Institution has claimed that next gen billiard tech will scan a players shooting preferences and then suggest exercises to practice. Keeping beginners in the fun phase is critical and letting them see their errors is what innovative educational technology can do.
 
I was walking through the park and heard a sound coming from a nearby bush, down near the lake, it sounded like this..

I love you - Ouch !

so I move a little closer to the bush , trying to figure out what is going on here, I hear it again,

I love you - OUCH !


now I'm really curious what is going on there so I go dwn by the lake and peer in behind the bush.

Know want I saw?







Two porcupines !
 
Carom Analyzer with only 2 rail reflections:

I am rewriting it to be recursive. The initial program works.
If anyone has ideas, its an open source project.

The first ever digital mapping of carom table, led by BARPA and sponsored by Professor Justin. Only the first and second rail contacts are shown. More development will result in more reflections.

The second big announcement is the development for hitting the ball with non center hits is in development. If anyone is interested, mapping the collision contacts for two spheres sounds trivial but in programming languages its not always.

If anyone runs the code and it doesn't work please post.


Code:
import pygame

from pygame.locals import *
from math import *
from sys import exit
from random import *

def xydist(p1,p2):
    return  sqrt( (p2[0] - p1[0])**2 + (p2[1] - p1[1])**2 )

def findb(px,py,ny,nx):
    b = py - (float(ny)/float(nx))*(px)
   
    return b

def findi(ny,nx, tx, ty, b1):
    t=[]
    t.append( (10, (ny/nx)*(10) + b1  ))
    t.append( (tx, (ny/nx)*(tx) + b1))
    t.append( ((10-b1)*nx/ny , 10) )
    t.append( ((ty-b1)*nx/ny , ty) )

    return t


def showi(p):
    temp=[]
    for data in p:
        if data[0]>0 and data[0]<1020 and data[1]>0 and data[1]<520:
            temp.append (data)
    return temp


###
def main():
 
  pygame.init()
  my_font = pygame.font.SysFont("arial", 16)
  pygame.display.set_caption("First Reflection")
  screen = pygame.display.set_mode((1200,800),0,32)
  state = 0
  xup=1010
  yup=510

  xup2=250
  yup2=90

  ox,oy=300,150


  while (state==0):

    colors=[(255,255,255),(55,55,200)]
    blue= (55,55,200)
    white=(255,255,255)
    color1=(10,100,200)
    color2=(10,10,200)
    color3=(10,10,20)
    colors.append
    screen.fill((0,0,0))

    for i in range(4):
        pygame.draw.line(screen,(255,255,0),(10,10+125*i),(xup,10+125*i))
    for i in range(8):
        pygame.draw.line(screen,(255,255,0),(10+125*i,10),(10+125*i,yup))

           
   
    pygame.draw.line(screen,colors[0],(10,10),(xup,10))
    pygame.draw.line(screen,colors[0],(10,yup),(xup,yup))
 
    pygame.draw.line(screen,colors[0],(10,10),(10,yup))
    pygame.draw.line(screen,colors[0],(xup,10),(xup,yup))

   
    pygame.draw.circle(screen,blue,(ox,oy),20,1)

    pygame.draw.circle(screen,blue,(xup2,yup2),20,1)
    pygame.draw.line(screen,colors[0],(ox,oy),(xup2,yup2))

   

    dy=float(oy-yup2)
    dx=float(ox-xup2)
    if dx!=0 and dy!=0:
 
        b=findb(ox,oy,dy,dx)
        r = findi(dy,dx,xup,yup, b)
        rp = showi(r)
 
        for data in rp:
            pygame.draw.line(screen,(255,255,0),(ox,oy),data)
            pygame.draw.line(screen,(255,255,0),(xup2,yup2),data)
            pygame.draw.circle(screen,(255,255,255),data,15,1)


        b2=findb(rp[1][0],rp[1][1],-dy,dx)
        r2 = findi(-dy,dx,xup,yup, b2)
        rp2 = showi(r2)
        for data in rp2:
            #pygame.draw.line(screen,(255,255,0),(rp[1][0],rp[1][1]),data)
            pygame.draw.circle(screen,(255,255,255),data,15,1)
        pygame.draw.circle(screen,(255,255,255),rp2[0],15,1)
        pygame.draw.circle(screen,(255,255,255),rp2[1],15,1)
       
        pygame.draw.line(screen,(255,255,0),rp2[0],rp2[1],15)
       

        b3=findb(rp[0][0],rp[0][1],-dy,dx)
        r3 = findi(-dy,dx,xup,yup, b3)
        rp3 = showi(r3)
 
        for data in rp2:
            pygame.draw.line(screen,(255,255,0),(rp[1][0],rp[1][1]),data)
            pygame.draw.circle(screen,(255,255,255),data,15,1)

        if len(rp3)>=1:
            pygame.draw.circle(screen,(255,255,255),rp3[0],20,1)
            pygame.draw.circle(screen,(5,5,255),rp3[1],20,1)
        else:
            pygame.draw.circle(screen,(255,255,255),rp3[0],20,1)
        #REFLECTIONO2

        pygame.draw.line(screen,(255,255,0),rp3[0],rp3[1],15)
        b4=findb(rp3[0][0],rp3[0][1],dy,dx)
        r4 = findi(dy,dx,xup,yup, b4)
        rp4 = showi(r4)
        for data in rp4:
            pygame.draw.line(screen,(255,255,0),rp3[0],data)
            pygame.draw.circle(screen,(255,255,255),data,20,1)

     


    if dy==0:
        pygame.draw.line(screen,(255,255,0),(xup,oy),(10,oy))
    elif dx==0:
        pygame.draw.line(screen,(255,255,0),(ox,10),(ox,yup))      
#####

    else:
        r1=(xup2,yup2)
        r2=(ox,oy)
        pygame.draw.line(screen,white,r1,r2)


   
    for event in pygame.event.get():
      if event.type == QUIT:
        state = 1

      if event.type == KEYDOWN:
        if event.key == K_a:
            ox-=10
        elif event.key == K_s:

            oy+=10
        elif event.key == K_d:
            ox+=10
           
        elif event.key == K_w:
            oy-=10

        elif event.key == K_g:
            xup2-=10
        elif event.key == K_h:

            yup2+=10
        elif event.key == K_j:
            xup2+=10
           
        elif event.key == K_y:
            yup2-=10
           
        elif event.key == K_z:
            ox,oy=pygame.mouse.get_pos()
           
        elif event.key == K_x:
            xup2,yup2=pygame.mouse.get_pos()        




 
    pygame.display.update()
 


main()
pygame.quit()
 
Back
Top