|
Am I reading this right if I say that you want to select the edge if the distance between your vector (the ray) is shorter than the distance epsilon (or some other defined minimal distance) from the line?
If we move to 2d a Voronoi diagram would suffice? Or some version of this:
Add a point to a polyline[^]
|
|
|
|
|
I'm not sure I understand the ray part, but since you're talking 3D, I'd look for the intersection of the mesh parts with a sphere centered on the mouse click location -- point (vertex) contained in sphere, line segment (edge) fully or partially contained in sphere, etc. This means you'll need to keep track of the cursor location in three dimensions and map the actual mouse gestures on the screen to somehow moving that 3D cursor.
This is pretty standard math for any 3D rendering or 3D game, so you might see if you can find a library that already implements the heavy lifting for you. If you roll your own, there's tons of resources for this sort of math, but I often found myself at the Wolfram reference site.
If your mesh is big, performance will be pretty slow. I think a lot of the 3D editors do the voxel thing so they can check only a subset for each event.
We can program with only 1's, but if all you've got are zeros, you've got nothing.
|
|
|
|
|
Ah.. I see you are suggesting me to go for Sphere-Line intersect instead of Ray-Line. Am I right? Although currently, I'm not concern about the vertex part since I already did it somehow..
But I think I should really check out if I can implement the Sphere-Line intersect idea to pick triangle's edge.
And yes, many thanks for the suggestion about performance
|
|
|
|
|
Actually, now that I've thought about it, sphere math is overkill, and probably not what you're wanting anyway. It'll work, but it's be simpler to just calculate nearest point on a line to a 3D point, and then decide if A) that falls within the endpoints of the line segment, and B) the distance between the two are close enough.
However, if you're using your "ray" to describe corner points of a 3D prism that's the selection bounding volume, then its just point inside a volume, and 3D plane/line-segment intersection math.
We can program with only 1's, but if all you've got are zeros, you've got nothing.
|
|
|
|
|
I'm in the process of writing my 4th generation package calculator. Over the years, UPS and FedEx require that you enter package dimensions and weight to get a quote.
Before I was able to create a clump, which I call a unit of mass, based off the cart database which contains each products dimensions, then cube that clump into a cube shape. But times have changed.
My 3rd generation package calculator was a complete failure overall, in which I tried using SQL Linq to calculate from the database
So here is my 4th generation attempt.
I get all the items from the database, and throw the items into 1 of 4 categories - List(Of
These will always be separate packages
Isolated Items - Case Quantities, you just slap a label on them and ship
Long Items, like sticks, long levels over 6ft
These can be combined into a single package, if under the max parameters
Thin Items like pancakes, AAA batteries less than 1/2" height
Common Items - you can throw them in a box, slap a label and ship
Then I wrote 4 functions that calculate the length, width, height, dimensional weight, gravity weight.
Within each function, a loop runs.
Each function is slightly different, ...
1. lines up the items by length, then loops down the lengths going wider, then taller
2. stacks them up like a tower, largest on the bottom
3. Isolate - its just a package, get the length, width, height, weight and go
4. Common - I'm in doubt on this one, needs improvement
If the limit is reached, the Create_Package fires and makes a Package.
So now I have these packages, and run Package_Combine, in which I see if I can throw a THIN package into the common box, to reduce the number of packages, because each package has a base cost of $7.00, and shoppers freak out.
The packages are a class of package_types, that are sent off to UPS or Fedex for a Quote, in which those programs I wrote loop and submit each package as a single shipment.
My code is too large to post. So I will post a snippet of 2 functions to start with.
So my question is, do you think I'm on the right track. Does a better more efficient way pop into your head. Did I make it way too complicated?
Think I get can further refine the 4 functions into 1 function by using more Linq?
I have to get this right this time, I'm tired of being poor and need to raise my income. I don't have the funds to just pay someone to write this, and how would I validate that person before hire.
Oh and I expect to hear crickets on this post, sit here forever with no reply.
Here are some known values
Private Const MAX_DIMENSIONAL_LENGTH As Decimal = 108.0
Private Const MAX_DIMENSIONAL_WEIGHT As Decimal = 165.0
Private Const MAX_GRAVITY_WEIGHT As Decimal = 150.0
Private Const MAX_TYPICAL_BOXLENGTH As Decimal = 37.0
Private Const MIN_TYPICAL_LONG_ITEM As Decimal = 72.0
Common Items - I'm in doubt about this one.
Private Shared Function Package_C1( _
ByVal pItems As List(Of model_rateItems),
ByRef packages() As package_type) As Integer
Dim pValue As Integer = 0
Dim pdx As Integer = 0
Dim item As New model_rateItems()
Dim gWeight As Decimal = 0
Dim dWeight As Decimal = 0
Dim dPackage As Decimal = 0
Dim oFlag As Boolean = True
For Each p As model_rateItems In pItems _
.OrderByDescending(Function(m) m.Length) _
.OrderByDescending(Function(m) m.Width) _
.OrderByDescending(Function(m) m.Height)
pdx += 1
If (p.Qty = 1) Then
gWeight += p.Weight
item.Cost += p.Cost
item.Price += p.Price
item.Weight += p.Weight
item.Description = If(item.Description Is String.Empty, p.Description, item.Description & ", " & p.Description)
item.Hazmat = If(p.Hazmat = True, True, item.Hazmat)
item.DryIce = If(p.DryIce = True, True, item.DryIce)
item.Origin = If(item.Origin Is String.Empty, p.Origin, item.Origin)
item.Length = If(p.Length > item.Length, p.Length, item.Length)
item.Width = If(p.Width > item.Width, p.Width, item.Width)
item.Height = If(item.Height = 0, p.Height, (item.Height + p.Height))
dWeight = Calc_DWeight(item)
If (dWeight > MAX_DIMENSIONAL_WEIGHT Or item.Weight > MAX_GRAVITY_WEIGHT) Then
pValue += Package_Create("COMMON", dWeight, item, packages)
End If
Else
item.Cost += p.Cost * p.Qty
item.Price += p.Price * p.Qty
item.Weight += p.Weight * p.Qty
item.Description = If(item.Description Is String.Empty, p.Description, item.Description & ", " & p.Description)
item.Hazmat = If(p.Hazmat = True, True, item.Hazmat)
item.DryIce = If(p.DryIce = True, True, item.DryIce)
item.Origin = If(item.Origin Is String.Empty, p.Origin, item.Origin)
item.Length = If(p.Length > item.Length, p.Length, item.Length)
item.Width = If(p.Width > item.Width, p.Width, item.Width)
item.Height = If(item.Height = 0, p.Height, (item.Height + (p.Height * p.Qty)))
dWeight = Calc_DWeight(item)
If (dWeight > MAX_DIMENSIONAL_WEIGHT Or item.Weight > MAX_GRAVITY_WEIGHT) Then
pValue += Package_Create("COMMON", dWeight, item, packages)
End If
End If
Next
dWeight = Calc_DWeight(item)
pValue += Package_Create("COMMON", dWeight, item, packages)
Return pValue
End Function
Long Items - It's seems to work well. but I think maybe there's a more efficient way to do it.
Private Shared Function Package_L1( _
ByVal pItems As List(Of model_rateItems),
ByRef packages() As package_type) As Integer
Dim pValue As Integer = 0
Dim pdx As Integer = 0
Dim item As New model_rateItems()
Dim dWeight As Decimal = 0
Dim oFlag As Boolean = True
For Each p As model_rateItems In pItems.OrderByDescending(Function(m) m.Length)
pdx += 1
If (p.Qty = 1) Then
item.Cost += p.Cost
item.Price += p.Price
item.Weight += p.Weight
item.Description = If(pdx = 1, p.Description, ", " & p.Description)
item.Hazmat = If(p.Hazmat = True, True, item.Hazmat)
item.DryIce = If(p.DryIce = True, True, item.DryIce)
item.Origin = If(item.Origin Is String.Empty, p.Origin, item.Origin)
If (p.Length > item.Length) Then
item.Length = p.Length
item.Width = If(item.Width = 0, p.Width, item.Width)
item.Height = If(item.Height = 0, p.Height, item.Height)
Else
If (p.Width > item.Width) Then
item.Length = item.Length
item.Width = p.Width
item.Height = item.Height + p.Height
Else
item.Length = item.Length
item.Width = item.Width
item.Height = item.Height + p.Height
End If
End If
dWeight = Calc_DWeight(item)
If (dWeight > MAX_DIMENSIONAL_LENGTH Or item.Weight > MAX_GRAVITY_WEIGHT) Then
pValue += Package_Create("LONG", dWeight, item, packages)
dWeight = 0
item = New model_rateItems()
ElseIf (pdx = pItems.Count()) Then
pValue += Package_Create("LONG", dWeight, item, packages)
Exit For
End If
Else
item.Description = If(pdx = 1, p.Description, item.Description & "," & p.Description)
item.Hazmat = If(p.Hazmat = True, True, item.Hazmat)
item.DryIce = If(p.DryIce = True, True, item.DryIce)
item.Origin = If(item.Origin Is String.Empty, p.Origin, item.Origin)
item.Width = If(item.Width = 0, p.Width, item.Width)
item.Height = If(item.Height = 0, p.Height, item.Height)
For idx As Integer = 0 To p.Qty - 1
item.Length = item.Length + p.Length
item.Weight += p.Weight
item.Cost += p.Cost
item.Price += p.Price
If (item.Length > MAX_DIMENSIONAL_LENGTH And item.Weight < MAX_GRAVITY_WEIGHT) Then
If (p.Length > item.Length) Then
item.Length = p.Length
item.Width += p.Width
item.Height = If(p.Height > item.Height, p.Height, item.Height)
Else
item.Length = item.Length - p.Length
item.Width += p.Width
item.Height = If(p.Height > item.Height, p.Height, item.Height)
End If
ElseIf (item.Length < MAX_DIMENSIONAL_LENGTH And item.Weight < MAX_GRAVITY_WEIGHT) Then
If (p.Length > item.Length) Then
item.Length = p.Length
item.Width += p.Width
item.Height = If(p.Height > item.Height, p.Height, item.Height)
Else
item.Length = item.Length
item.Width += p.Width
item.Height = If(p.Height > item.Height, p.Height, item.Height)
End If
End If
dWeight = Calc_DWeight(item)
If (dWeight > MAX_DIMENSIONAL_WEIGHT Or item.Weight > MAX_GRAVITY_WEIGHT) Then
pValue += Package_Create("LONG", dWeight, item, packages)
dWeight = 0
idx = idx - 1
item = New model_rateItems()
End If
Next
End If
Next
If (pValue = 0) Then
dWeight = Calc_DWeight(item)
pValue += Package_Create("LONG", dWeight, item, packages)
End If
Return pValue
End Function
|
|
|
|
|
I've not had a chance to give your question the attention it deserves, but one obvious issue sticks out:
jkirkerx wrote: For Each p As model_rateItems In pItems _
.OrderByDescending(Function(m) m.Length) _
.OrderByDescending(Function(m) m.Width) _
.OrderByDescending(Function(m) m.Height)
That's only going to sort by the height; each OrderBy method discards any previous ordering.
To sort by all three, you need to use ThenBy on the subsequent sortings:
For Each p As model_rateItems In pItems _
.OrderByDescending(Function(m) m.Length) _
.ThenByDescending(Function(m) m.Width) _
.ThenByDescending(Function(m) m.Height)
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Oh I didn't know that, will make the change now.
I'm starting to use Linq more now, since you helped me with my MVC project.
|
|
|
|
|
|
One throws the items into a box, specifies the dimensions of the box (customer packaging - if one want any applicable discount), weighs the box, selects a shipping option (ground; 2-day; etc.) and prints and attaches a label. Note that many carriers supply "standard size boxes" that are priced based on size, not weight (up to say a 70 lb max).
Seems the challenge is to have all items to be shipped to a given customer collected ("picked") at the same time for shipping; not what box it may fit in (which may need extra "packing" for fragile items). The shipped boxes I receive tend to be much larger than their actually contents.
(I currently program self-service shipping kiosks).
|
|
|
|
|
I under stand that. But I can't customers to standardize on boxes. I've been trying for 7 years now.
It would be easier to get the customer to commit to purchasing boxes in certain sizes, and then I just calculate which boxes I need.
Now this is a calculator for determining the ship rate before the customer makes a purchase.
I'm going to take the code and turn it into a console app, with some fake data, so folks that are interested can play with it.
|
|
|
|
|
I created a console app if you want to play with it, it's a VS2015 project with all the code that I wrote for it.
it has data or shopping cart items that you can load, and will output the results to the screen
So this is for my old program Internet Commerce Engine 5 written in VB
I have a new program called project Indigo written in MVC C# that I will port this over in Sept 2016
So sorry about it being in VB. But the concept should be the same.
DropBox that you can download the project, now its the folder.
I fixed the console output and worked on Package_C1
Dropbox - Code Project[^]
Preview of Project Indigo Shopping, not much there yet
Project Indigo! - Home Page[^]
Project Indigo! - Browse[^]
I could use help with the Navigation Bar in the shopping section, much harder than I thought to construct using Bootstrap.
modified 5-Aug-16 17:04pm.
|
|
|
|
|
Thanks! I was looking this info
|
|
|
|
|
Well I'm still working on it!, but taking a break on it today.
It needs improvement on the Common items, and a better way to arrange the items.
I'm thinking aspect ratios today, to treat each item by aspect ratio or shape, to determine how to stack them, then take a measurement of the dimensional weight.
|
|
|
|
|
Hello.
I'm making a racing game. I've been messing around with numbers and stuff to make a script for simulating car engine temp which weather temperature, weather humidity, the power of radiator, Engine output and engine oil play a role in increasing/decreasing the temp.
For the wheels, only weather temp and humidity, Wheel air pressure and engine power is needed (I guess).
I just can't make an accurate one. Would be happy if someone suggests an algorithm to simulate car heat temperature.
Remember that it is only a game, not a military-grade advanced simulation software .
|
|
|
|
|
Apparently using Nitrogen in the tires is a factor...
Engine temp increases with loss of oil pressure / oil volume
Engine temp increases with engine RPM
Ambient temp increases engine temp
Humidity affects air density which decreases combustibility which affects engine power causing more work and more heat (?)
Bigger / better radiators allow for running at (what would be) a higher temperature
|
|
|
|
|
Not any help here
But turning raises tire heat.
Radius of the turn, plus speed increases heat. Steering wheel marked in degrees, say 270 indicates a sharp left turn.
Front or rear wheel drive? A sharp left turn on front wheel drive will raise the right front tire temp, then the left rear tire temp. vice versus for rear wheel drive.
Track temp, asphalt gets very hot and tacky in the sun, cold and slippery in the rain or ice.
Tire type, summer tire vs winter tire. Summer tires run hotter.
Tire pressure, more is cooler, less is hotter. Just like water which boils at 212F at sea level, you can increase the pressure and raise the boil point like the coolant system of a car.
|
|
|
|
|
Am currently working on a project relating to quantum cryptography
|
|
|
|
|
|
I don't think that you could find a source code for QKD.. There is only some general info and schemes..Well it seems to me so.
|
|
|
|
|
Hi,
I tried your code to protect PDF file.
I registered the DLL : ProtectPDF and added it's reference to Excel VBA.
But when I am trying to run the code I am getting the error 'ActiveX component can't create object'
Please help!
Thank you!
|
|
|
|
|
Member 12611971 wrote: I tried your code Presumably you are talking about some article here on CodeProject. If so, then you need to post your question in the forum at the end of the article.
|
|
|
|
|
I would also like to point out that we are volunteers; it is not urgent here.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Is there any algorithm to map these two fields
if n = 5
field 1 Field 2
1 (1)
2 (1,2)
3 (1,2,3)
4 (1,2,3,4)
5 (1,2,3,4,5)
6 (2)
7 (2,3)
8 (2,3,4)
9 (2,3,4,5)
10 (3)
11 (3,4)
12 (3,4,5)
13 (4)
14 (4,5)
15 (5)
I want a function which can give the second field as output for input of first field .
Expect to have a simple mathematical algorithm.
Please help me with this problem.
hint: 1 | 2 | 3 | 4 | 5
* * * * *
* * * *
* * *
* *
*
|
|
|
|
|
Probably homework, solvable with a couple of loops.
|
|
|
|
|
Thank you. Looking forward to have the answer..
|
|
|
|
|