The code looks about right, but I'd set things up in advance;
spriteSize = virtMin * 0.4
BarHeight = virtMin * 0.15
But I go a step further and use constants where possible;
#constant VIRT_MIN 640.0
#constant BAR_DIV 0.15
#constant SPRITE_DIV 0.4
spriteSize = VIRT_MIN * SPRITE_DIV
BarHeight = VIRT_MIN * BAR_DIV
I use the name SPRITE_DIV as a reminder that this is the sprite size as a division of the VIRT_MIN, so if at a later time I change the resolution used within the game, I know that this value will change too.
When I plan the game layout, I look for shortcuts
The first question I ask myself is "is it square?"
Games that play well in a square are great because I can simply make the game area VirtMin x VirtMin and use other stuff to pad the other areas.
Then if the orientation of the device changes, the game area does not need to be adjusted, I just moved the other stuff around to match the new shape.
This came in handy in my snake clone;

eg. In portrait;
- the ad is placed at the top
ad_height = virtMin * ( 50.0 / 320.0 ) ' Scaled Ad
ad_height = 50.0 ' Native Size Ad
- the game area is full width, square and below the ad
game_top = ad_height
game_bottom = ad_height + virtMin
- the mini map is below the game area and also square (handy)
map_size = virtMax - game_bottom
- the touch pad width is remaining area to the right of the mini map
pad_size = virtMin - map_size
- .. and also square
pad_top = virtMax - pad_size
- ..making it overlap the game slightly, which leaves a small area for counters and assorted bits
- the score and objectives are placed over the game screen.
- depth, a couple of transparent sprites and the touch pad overlap are used to mask obvious boundaries.
A similar system is used for landscape, with the exception that (because of the shape of the ads) to keep the game area as large as possible the ad is over the game area at the bottom. As a result the mini map and pad are slightly larger.
The game area is positioned using offsets, so the positions of the bulk of the sprites remain unchanged even though the display is a different shape.
The mini map is created from main game screen with a different offset and zoom using setscissor. The only thing that changes is the scissor coordinates.
For this game, VirtMin was used solely for positioning of things on the display plane, the game itself operated on the world plane - which is completely independent.
Game graphics were scaled with viewZoom so their size in relation to the device was handled by the zoom calculation not the sprite size.
That is - the sprites were a fixed size and VirtMin was used in the zoom calculation to scale them to suite the device.